home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / setupapi.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  99.9 KB  |  3,874 lines

  1. /*++
  2.  
  3. Copyright (c) 1995-1996 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     setupapi.h
  8.  
  9. Abstract:
  10.  
  11.     Public header file for Windows NT Setup services Dll.
  12.  
  13. Author:
  14.  
  15.     Ted Miller (tedm) 11-Jan-1995
  16.  
  17. Revision History:
  18.  
  19. --*/
  20.  
  21. #ifndef _INC_SETUPAPI
  22. #define _INC_SETUPAPI
  23. #pragma option push -b
  24.  
  25.  
  26. //
  27. // Define API decoration for direct importing of DLL references.
  28. //
  29. #if !defined(_SETUPAPI_)
  30. #define WINSETUPAPI DECLSPEC_IMPORT
  31. #else
  32. #define WINSETUPAPI
  33. #endif
  34.  
  35.  
  36. #include <pshpack1.h>   // Assume byte packing throughout
  37.  
  38.  
  39. #ifdef __cplusplus
  40. extern "C" {
  41. #endif
  42.  
  43. #ifndef __LPGUID_DEFINED__
  44. #define __LPGUID_DEFINED__
  45. typedef GUID *LPGUID;
  46. #endif
  47.  
  48. //
  49. // Include commctrl.h for our use of HIMAGELIST and wizard support.
  50. //
  51.  
  52. #include <commctrl.h>
  53.  
  54.  
  55.  
  56. //
  57. // Define maximum string length constants as specified by
  58. // Windows 95.
  59. //
  60. #define LINE_LEN                    256 // Win95-compatible maximum for displayable
  61.                                         // strings coming from a device INF.
  62. #define MAX_INF_STRING_LENGTH      4096 // Actual maximum size of an INF string (including
  63.                                         // string substitutions).
  64. #define MAX_TITLE_LEN                60
  65. #define MAX_INSTRUCTION_LEN         256
  66. #define MAX_LABEL_LEN                30
  67. #define MAX_SERVICE_NAME_LEN        256
  68.  
  69. //
  70. // Define type for reference to loaded inf file
  71. //
  72. typedef PVOID HINF;
  73.  
  74. //
  75. // Inf context structure. Applications must not interpret or
  76. // overwrite values in these structures.
  77. //
  78. typedef struct _INFCONTEXT {
  79.     PVOID Inf;
  80.     PVOID CurrentInf;
  81.     UINT Section;
  82.     UINT Line;
  83. } INFCONTEXT, *PINFCONTEXT;
  84.  
  85. //
  86. // Inf file information structure.
  87. //
  88. typedef struct _SP_INF_INFORMATION {
  89.     DWORD InfStyle;
  90.     DWORD InfCount;
  91.     BYTE VersionData[ANYSIZE_ARRAY];
  92. } SP_INF_INFORMATION, *PSP_INF_INFORMATION;
  93.  
  94. //
  95. // SP_INF_INFORMATION.InfStyle values
  96. //
  97. #define INF_STYLE_NONE  0       // unrecognized or non-existent
  98. #define INF_STYLE_OLDNT 1       // winnt 3.x
  99. #define INF_STYLE_WIN4  2       // Win95
  100.  
  101. //
  102. // Target directory specs.
  103. //
  104. #define DIRID_ABSOLUTE          -1              // real 32-bit -1
  105. #define DIRID_ABSOLUTE_16BIT     0xffff         // 16-bit -1 for compat w/setupx
  106. #define DIRID_NULL               0
  107. #define DIRID_SRCPATH            1
  108. #define DIRID_WINDOWS           10
  109. #define DIRID_SYSTEM            11              // system32
  110. #define DIRID_DRIVERS           12
  111. #define DIRID_IOSUBSYS          DIRID_DRIVERS
  112. #define DIRID_INF               17
  113. #define DIRID_HELP              18
  114. #define DIRID_FONTS             20
  115. #define DIRID_VIEWERS           21
  116. #define DIRID_APPS              24
  117. #define DIRID_SHARED            25
  118. #define DIRID_BOOT              30
  119.  
  120. #define DIRID_SYSTEM16          50
  121. #define DIRID_SPOOL             51
  122. #define DIRID_SPOOLDRIVERS      52
  123. #define DIRID_USERPROFILE       53
  124. #define DIRID_LOADER            54
  125.  
  126. #define DIRID_DEFAULT           DIRID_SYSTEM
  127.  
  128. //
  129. // First user-definable dirid. See SetupSetDirectoryId().
  130. //
  131. #define DIRID_USER              0x8000
  132.  
  133.  
  134. //
  135. // Setup callback notification routine type
  136. //
  137. typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)(
  138.     IN PVOID Context,
  139.     IN UINT Notification,
  140.     IN UINT Param1,
  141.     IN UINT Param2
  142.     );
  143.  
  144. typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)(
  145.     IN PVOID Context,
  146.     IN UINT Notification,
  147.     IN UINT Param1,
  148.     IN UINT Param2
  149.     );
  150.  
  151. #ifdef UNICODE
  152. #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
  153. #else
  154. #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
  155. #endif
  156.  
  157.  
  158. //
  159. // Operation/queue start/end notification. These are ordinal values.
  160. //
  161. #define SPFILENOTIFY_STARTQUEUE         0x00000001
  162. #define SPFILENOTIFY_ENDQUEUE           0x00000002
  163. #define SPFILENOTIFY_STARTSUBQUEUE      0x00000003
  164. #define SPFILENOTIFY_ENDSUBQUEUE        0x00000004
  165. #define SPFILENOTIFY_STARTDELETE        0x00000005
  166. #define SPFILENOTIFY_ENDDELETE          0x00000006
  167. #define SPFILENOTIFY_DELETEERROR        0x00000007
  168. #define SPFILENOTIFY_STARTRENAME        0x00000008
  169. #define SPFILENOTIFY_ENDRENAME          0x00000009
  170. #define SPFILENOTIFY_RENAMEERROR        0x0000000a
  171. #define SPFILENOTIFY_STARTCOPY          0x0000000b
  172. #define SPFILENOTIFY_ENDCOPY            0x0000000c
  173. #define SPFILENOTIFY_COPYERROR          0x0000000d
  174. #define SPFILENOTIFY_NEEDMEDIA          0x0000000e
  175. #define SPFILENOTIFY_QUEUESCAN          0x0000000f
  176. //
  177. // These are used with SetupIterateCabinet().
  178. //
  179. #define SPFILENOTIFY_CABINETINFO        0x00000010
  180. #define SPFILENOTIFY_FILEINCABINET      0x00000011
  181. #define SPFILENOTIFY_NEEDNEWCABINET     0x00000012
  182. #define SPFILENOTIFY_FILEEXTRACTED      0x00000013
  183.  
  184. #define SPFILENOTIFY_FILEOPDELAYED      0x00000014
  185.  
  186. //
  187. // Copy notification. These are bit flags that may be combined.
  188. //
  189. #define SPFILENOTIFY_LANGMISMATCH       0x00010000
  190. #define SPFILENOTIFY_TARGETEXISTS       0x00020000
  191. #define SPFILENOTIFY_TARGETNEWER        0x00040000
  192.  
  193. //
  194. // File operation codes and callback outcomes.
  195. //
  196. #define FILEOP_COPY                     0
  197. #define FILEOP_RENAME                   1
  198. #define FILEOP_DELETE                   2
  199.  
  200. #define FILEOP_ABORT                    0
  201. #define FILEOP_DOIT                     1
  202. #define FILEOP_SKIP                     2
  203. #define FILEOP_RETRY                    FILEOP_DOIT
  204. #define FILEOP_NEWPATH                  4
  205.  
  206. //
  207. // Flags in inf copy sections
  208. //
  209. #define COPYFLG_WARN_IF_SKIP            0x00000001      // warn if user tries to skip file
  210. #define COPYFLG_NOSKIP                  0x00000002      // disallow skipping this file
  211. #define COPYFLG_NOVERSIONCHECK          0x00000004      // ignore versions and overwrite target
  212. #define COPYFLG_FORCE_FILE_IN_USE       0x00000008      // force file-in-use behavior
  213. #define COPYFLG_NO_OVERWRITE            0x00000010      // do not copy if file exists on target
  214. #define COPYFLG_NO_VERSION_DIALOG       0x00000020      // do not copy if target is newer
  215. #define COPYFLG_REPLACEONLY             0x00000400      // copy only if file exists on target
  216.  
  217. //
  218. // Flags in inf delete sections
  219. // New flags go in high word
  220. //
  221. #define DELFLG_IN_USE                   0x00000001      // queue in-use file for delete
  222. #define DELFLG_IN_USE1                  0x00010000      // high-word version of DELFLG_IN_USE
  223.  
  224. //
  225. // Source and file paths. Used when notifying queue callback
  226. // of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR.
  227. //
  228. typedef struct _FILEPATHS_A {
  229.     PCSTR  Target;
  230.     PCSTR  Source;  // not used for delete operations
  231.     UINT   Win32Error;
  232.     DWORD  Flags;   // such as SP_COPY_NOSKIP for copy errors
  233. } FILEPATHS_A, *PFILEPATHS_A;
  234.  
  235. typedef struct _FILEPATHS_W {
  236.     PCWSTR Target;
  237.     PCWSTR Source;  // not used for delete operations
  238.     UINT   Win32Error;
  239.     DWORD  Flags;   // such as SP_COPY_NOSKIP for copy errors
  240. } FILEPATHS_W, *PFILEPATHS_W;
  241.  
  242. #ifdef UNICODE
  243. typedef FILEPATHS_W FILEPATHS;
  244. typedef PFILEPATHS_W PFILEPATHS;
  245. #else
  246. typedef FILEPATHS_A FILEPATHS;
  247. typedef PFILEPATHS_A PFILEPATHS;
  248. #endif
  249.  
  250.  
  251. //
  252. // Structure used with SPFILENOTIFY_NEEDMEDIA
  253. //
  254. typedef struct _SOURCE_MEDIA_A {
  255.     PCSTR Reserved;
  256.     PCSTR Tagfile;          // may be NULL
  257.     PCSTR Description;
  258.     //
  259.     // Pathname part and filename part of source file
  260.     // that caused us to need the media.
  261.     //
  262.     PCSTR SourcePath;
  263.     PCSTR SourceFile;
  264.     DWORD Flags;            // subset of SP_COPY_xxx
  265. } SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
  266.  
  267. typedef struct _SOURCE_MEDIA_W {
  268.     PCWSTR Reserved;
  269.     PCWSTR Tagfile;         // may be NULL
  270.     PCWSTR Description;
  271.     //
  272.     // Pathname part and filename part of source file
  273.     // that caused us to need the media.
  274.     //
  275.     PCWSTR SourcePath;
  276.     PCWSTR SourceFile;
  277.     DWORD  Flags;           // subset of SP_COPY_xxx
  278. } SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
  279.  
  280. #ifdef UNICODE
  281. typedef SOURCE_MEDIA_W SOURCE_MEDIA;
  282. typedef PSOURCE_MEDIA_W PSOURCE_MEDIA;
  283. #else
  284. typedef SOURCE_MEDIA_A SOURCE_MEDIA;
  285. typedef PSOURCE_MEDIA_A PSOURCE_MEDIA;
  286. #endif
  287.  
  288. //
  289. // Structure used with SPFILENOTIFY_CABINETINFO and
  290. // SPFILENOTIFY_NEEDNEWCABINET
  291. //
  292. typedef struct _CABINET_INFO_A {
  293.     PCSTR CabinetPath;
  294.     PCSTR CabinetFile;
  295.     PCSTR DiskName;
  296.     USHORT SetId;
  297.     USHORT CabinetNumber;
  298. } CABINET_INFO_A, *PCABINET_INFO_A;
  299.  
  300. typedef struct _CABINET_INFO_W {
  301.     PCWSTR CabinetPath;
  302.     PCWSTR CabinetFile;
  303.     PCWSTR DiskName;
  304.     USHORT SetId;
  305.     USHORT CabinetNumber;
  306. } CABINET_INFO_W, *PCABINET_INFO_W;
  307.  
  308. #ifdef UNICODE
  309. typedef CABINET_INFO_W CABINET_INFO;
  310. typedef PCABINET_INFO_W PCABINET_INFO;
  311. #else
  312. typedef CABINET_INFO_A CABINET_INFO;
  313. typedef PCABINET_INFO_A PCABINET_INFO;
  314. #endif
  315.  
  316. //
  317. // Structure used with SPFILENOTIFY_FILEINCABINET
  318. //
  319. typedef struct _FILE_IN_CABINET_INFO_A {
  320.     PCSTR NameInCabinet;
  321.     DWORD FileSize;
  322.     DWORD Win32Error;
  323.     WORD  DosDate;
  324.     WORD  DosTime;
  325.     WORD  DosAttribs;
  326.     CHAR  FullTargetName[MAX_PATH];
  327. } FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
  328.  
  329. typedef struct _FILE_IN_CABINET_INFO_W {
  330.     PCWSTR NameInCabinet;
  331.     DWORD  FileSize;
  332.     DWORD  Win32Error;
  333.     WORD   DosDate;
  334.     WORD   DosTime;
  335.     WORD   DosAttribs;
  336.     WCHAR  FullTargetName[MAX_PATH];
  337. } FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
  338.  
  339. #ifdef UNICODE
  340. typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO;
  341. typedef PFILE_IN_CABINET_INFO_W PFILE_IN_CABINET_INFO;
  342. #else
  343. typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO;
  344. typedef PFILE_IN_CABINET_INFO_A PFILE_IN_CABINET_INFO;
  345. #endif
  346.  
  347.  
  348. //
  349. // Define type for setup file queue
  350. //
  351. typedef PVOID HSPFILEQ;
  352.  
  353. //
  354. // Define type for reference to device information set
  355. //
  356. typedef PVOID HDEVINFO;
  357.  
  358. //
  359. // Device information structure (references a device instance
  360. // that is a member of a device information set)
  361. //
  362. typedef struct _SP_DEVINFO_DATA {
  363.     DWORD cbSize;
  364.     GUID  ClassGuid;
  365.     DWORD DevInst;    // DEVINST handle
  366.     DWORD Reserved;
  367. } SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
  368.  
  369.  
  370. //
  371. // Class installer function codes
  372. //
  373. #define DIF_SELECTDEVICE            0x00000001
  374. #define DIF_INSTALLDEVICE           0x00000002
  375. #define DIF_ASSIGNRESOURCES         0x00000003
  376. #define DIF_PROPERTIES              0x00000004
  377. #define DIF_REMOVE                  0x00000005
  378. #define DIF_FIRSTTIMESETUP          0x00000006
  379. #define DIF_FOUNDDEVICE             0x00000007
  380. #define DIF_SELECTCLASSDRIVERS      0x00000008
  381. #define DIF_VALIDATECLASSDRIVERS    0x00000009
  382. #define DIF_INSTALLCLASSDRIVERS     0x0000000A
  383. #define DIF_CALCDISKSPACE           0x0000000B
  384. #define DIF_DESTROYPRIVATEDATA      0x0000000C
  385. #define DIF_VALIDATEDRIVER          0x0000000D
  386. #define DIF_MOVEDEVICE              0x0000000E
  387. #define DIF_DETECT                  0x0000000F
  388. #define DIF_INSTALLWIZARD           0x00000010
  389. #define DIF_DESTROYWIZARDDATA       0x00000011
  390. #define DIF_PROPERTYCHANGE          0x00000012
  391. #define DIF_ENABLECLASS             0x00000013
  392. #define DIF_DETECTVERIFY            0x00000014
  393. #define DIF_INSTALLDEVICEFILES      0x00000015
  394.  
  395. typedef UINT        DI_FUNCTION;    // Function type for device installer
  396.  
  397.  
  398. //
  399. // Device installation parameters structure (associated with a
  400. // particular device information element, or globally with a device
  401. // information set)
  402. //
  403. typedef struct _SP_DEVINSTALL_PARAMS_A {
  404.     DWORD             cbSize;
  405.     DWORD             Flags;
  406.     DWORD             FlagsEx;
  407.     HWND              hwndParent;
  408.     PSP_FILE_CALLBACK InstallMsgHandler;
  409.     PVOID             InstallMsgHandlerContext;
  410.     HSPFILEQ          FileQueue;
  411.     DWORD             ClassInstallReserved;
  412.     DWORD             Reserved;
  413.     CHAR              DriverPath[MAX_PATH];
  414. } SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
  415.  
  416. typedef struct _SP_DEVINSTALL_PARAMS_W {
  417.     DWORD             cbSize;
  418.     DWORD             Flags;
  419.     DWORD             FlagsEx;
  420.     HWND              hwndParent;
  421.     PSP_FILE_CALLBACK InstallMsgHandler;
  422.     PVOID             InstallMsgHandlerContext;
  423.     HSPFILEQ          FileQueue;
  424.     DWORD             ClassInstallReserved;
  425.     DWORD             Reserved;
  426.     WCHAR             DriverPath[MAX_PATH];
  427. } SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
  428.  
  429. #ifdef UNICODE
  430. typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS;
  431. typedef PSP_DEVINSTALL_PARAMS_W PSP_DEVINSTALL_PARAMS;
  432. #else
  433. typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS;
  434. typedef PSP_DEVINSTALL_PARAMS_A PSP_DEVINSTALL_PARAMS;
  435. #endif
  436.  
  437.  
  438. //
  439. // SP_DEVINSTALL_PARAMS.Flags values
  440. //
  441. // Flags for choosing a device
  442. //
  443. #define DI_SHOWOEM                  0x00000001L     // support Other... button
  444. #define DI_SHOWCOMPAT               0x00000002L     // show compatibility list
  445. #define DI_SHOWCLASS                0x00000004L     // show class list
  446. #define DI_SHOWALL                  0x00000007L     // both class & compat list shown
  447. #define DI_NOVCP                    0x00000008L     // don't create a new copy queue--use
  448.                                                     // caller-supplied FileQueue
  449. #define DI_DIDCOMPAT                0x00000010L     // Searched for compatible devices
  450. #define DI_DIDCLASS                 0x00000020L     // Searched for class devices
  451. #define DI_AUTOASSIGNRES            0x00000040L     // No UI for resources if possible
  452.  
  453. // flags returned by DiInstallDevice to indicate need to reboot/restart
  454. #define DI_NEEDRESTART              0x00000080L     // Reboot required to take effect
  455. #define DI_NEEDREBOOT               0x00000100L     // ""
  456.  
  457. // flags for device installation
  458. #define DI_NOBROWSE                 0x00000200L     // no Browse... in InsertDisk
  459.  
  460. // Flags set by DiBuildDriverInfoList
  461. #define DI_MULTMFGS                 0x00000400L     // Set if multiple manufacturers in
  462.                                                     // class driver list
  463.  
  464. // Flag indicates that device is disabled
  465. #define DI_DISABLED                 0x00000800L     // Set if device disabled
  466.  
  467. // Flags for Device/Class Properties
  468. #define DI_GENERALPAGE_ADDED        0x00001000L
  469. #define DI_RESOURCEPAGE_ADDED       0x00002000L
  470.  
  471. // Flag to indicate the setting properties for this Device (or class) caused a change
  472. // so the Dev Mgr UI probably needs to be updatd.
  473. #define DI_PROPERTIES_CHANGE        0x00004000L
  474.  
  475. // Flag to indicate that the sorting from the INF file should be used.
  476. #define DI_INF_IS_SORTED            0x00008000L
  477.  
  478. // Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath
  479. // should be searched.
  480. #define DI_ENUMSINGLEINF            0x00010000L
  481.  
  482. // Flag that prevents ConfigMgr from removing/re-enumerating devices during device
  483. // registration, installation, and deletion.
  484. #define DI_DONOTCALLCONFIGMG        0x00020000L
  485.  
  486. // The following flag can be used to install a device disabled
  487. #define DI_INSTALLDISABLED          0x00040000L
  488.  
  489. // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver
  490. // list from its existing class driver list, instead of the normal INF search.
  491. #define DI_COMPAT_FROM_CLASS        0x00080000L
  492.  
  493. // This flag is set if the Class Install params should be used.
  494. #define DI_CLASSINSTALLPARAMS       0x00100000L
  495.  
  496. // This flag is set if the caller of DiCallClassInstaller does NOT
  497. // want the internal default action performed if the Class installer
  498. // returns ERROR_DI_DO_DEFAULT.
  499. #define DI_NODI_DEFAULTACTION       0x00200000L
  500.  
  501. // The setupx flag, DI_NOSYNCPROCESSING (0x00400000L) is not support in the Setup APIs.
  502.  
  503. // flags for device installation
  504. #define DI_QUIETINSTALL             0x00800000L     // don't confuse the user with
  505.                                                     // questions or excess info
  506. #define DI_NOFILECOPY               0x01000000L     // No file Copy necessary
  507. #define DI_FORCECOPY                0x02000000L     // Force files to be copied from install path
  508. #define DI_DRIVERPAGE_ADDED         0x04000000L     // Prop provider added Driver page.
  509. #define DI_USECI_SELECTSTRINGS      0x08000000L     // Use Class Installer Provided strings in the Select Device Dlg
  510. #define DI_OVERRIDE_INFFLAGS        0x10000000L     // Override INF flags
  511. #define DI_PROPS_NOCHANGEUSAGE      0x20000000L     // No Enable/Disable in General Props
  512.  
  513. #define DI_NOSELECTICONS            0x40000000L     // No small icons in select device dialogs
  514.  
  515. #define DI_NOWRITE_IDS              0x80000000L     // Don't write HW & Compat IDs on install
  516.  
  517.  
  518. //
  519. // SP_DEVINSTALL_PARAMS.FlagsEx values
  520. //
  521. #define DI_FLAGSEX_USEOLDINFSEARCH      0x00000001L  // Inf Search functions should not use Index Search
  522. #define DI_FLAGSEX_AUTOSELECTRANK0      0x00000002L  // SetupDiSelectDevice doesn't prompt user if rank 0 match
  523. #define DI_FLAGSEX_CI_FAILED            0x00000004L  // Failed to Load/Call class installer
  524.  
  525. #define DI_FLAGSEX_DIDINFOLIST          0x00000010L  // Did the Class Info List
  526. #define DI_FLAGSEX_DIDCOMPATINFO        0x00000020L  // Did the Compat Info List
  527.  
  528. #define DI_FLAGSEX_FILTERCLASSES        0x00000040L
  529. #define DI_FLAGSEX_SETFAILEDINSTALL     0x00000080L
  530. #define DI_FLAGSEX_DEVICECHANGE         0x00000100L
  531. #define DI_FLAGSEX_ALWAYSWRITEIDS       0x00000200L
  532. #define DI_FLAGSEX_ALLOWEXCLUDEDDRVS    0x00000800L
  533. #define DI_FLAGSEX_NOUIONQUERYREMOVE    0x00001000L
  534. #define DI_FLAGSEX_USECLASSFORCOMPAT    0x00002000L  // Use the device's class when building compat drv list.
  535.                                                      // (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)
  536.  
  537. #define DI_FLAGSEX_OLDINF_IN_CLASSLIST  0x00004000L  // Search legacy INFs when building class driver list.
  538.  
  539. #define DI_FLAGSEX_NO_DRVREG_MODIFY     0x00008000L  // Don't run AddReg and DelReg for device's software (driver) key.
  540.  
  541. //
  542. // Class installation parameters header.  This must be the first field of any class install
  543. // parameter structure.  The InstallFunction field must be set to the function code
  544. // corresponding to the structure, and the cbSize field must be set to the size of the
  545. // header structure.  E.g.,
  546. //
  547. // SP_ENABLECLASS_PARAMS EnableClassParams;
  548. //
  549. // EnableClassParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
  550. // EnableClassParams.ClassInstallHeader.InstallFunction = DIF_ENABLECLASS;
  551. //
  552. typedef struct _SP_CLASSINSTALL_HEADER {
  553.     DWORD       cbSize;
  554.     DI_FUNCTION InstallFunction;
  555. } SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
  556.  
  557.  
  558. //
  559. // Structure corresponding to a DIF_ENABLECLASS install function.
  560. //
  561. typedef struct _SP_ENABLECLASS_PARAMS {
  562.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  563.     GUID                   ClassGuid;
  564.     DWORD                  EnableMessage;
  565. } SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
  566.  
  567. #define ENABLECLASS_QUERY   0
  568. #define ENABLECLASS_SUCCESS 1
  569. #define ENABLECLASS_FAILURE 2
  570.  
  571.  
  572. //
  573. // Structure corresponding to a DIF_MOVEDEVICE install function.
  574. //
  575. typedef struct _SP_MOVEDEV_PARAMS {
  576.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  577.     SP_DEVINFO_DATA        SourceDeviceInfoData;
  578. } SP_MOVEDEV_PARAMS, *PSP_MOVEDEV_PARAMS;
  579.  
  580.  
  581. //
  582. // Values indicating a change in a device's state
  583. //
  584. #define DICS_ENABLE      0x00000001
  585. #define DICS_DISABLE     0x00000002
  586. #define DICS_PROPCHANGE  0x00000003
  587. #define DICS_START       0x00000004
  588. #define DICS_STOP        0x00000005
  589. //
  590. // Values specifying the scope of a device property change
  591. //
  592. #define DICS_FLAG_GLOBAL         0x00000001  // make change in all hardware profiles
  593. #define DICS_FLAG_CONFIGSPECIFIC 0x00000002  // make change in specified profile only
  594. #define DICS_FLAG_CONFIGGENERAL  0x00000004  // 1 or more hardware profile-specific
  595.                                              // changes to follow.
  596. //
  597. // Structure corresponding to a DIF_PROPERTYCHANGE install function.
  598. //
  599. typedef struct _SP_PROPCHANGE_PARAMS {
  600.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  601.     DWORD                  StateChange;
  602.     DWORD                  Scope;
  603.     DWORD                  HwProfile;
  604. } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
  605.  
  606.  
  607. //
  608. // Structure corresponding to a DIF_REMOVE install function.
  609. //
  610. typedef struct _SP_REMOVEDEVICE_PARAMS {
  611.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  612.     DWORD Scope;
  613.     DWORD HwProfile;
  614. } SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
  615.  
  616. #define DI_REMOVEDEVICE_GLOBAL                  0x00000001
  617. #define DI_REMOVEDEVICE_CONFIGSPECIFIC          0x00000002
  618.  
  619.  
  620. //
  621. // Structure corresponding to a DIF_SELECTDEVICE install function.
  622. //
  623. typedef struct _SP_SELECTDEVICE_PARAMS_A {
  624.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  625.     CHAR                   Title[MAX_TITLE_LEN];
  626.     CHAR                   Instructions[MAX_INSTRUCTION_LEN];
  627.     CHAR                   ListLabel[MAX_LABEL_LEN];
  628.     BYTE                   Reserved[2];                  // DWORD size alignment
  629. } SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
  630.  
  631. typedef struct _SP_SELECTDEVICE_PARAMS_W {
  632.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  633.     WCHAR                  Title[MAX_TITLE_LEN];
  634.     WCHAR                  Instructions[MAX_INSTRUCTION_LEN];
  635.     WCHAR                  ListLabel[MAX_LABEL_LEN];
  636. } SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
  637.  
  638. #ifdef UNICODE
  639. typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS;
  640. typedef PSP_SELECTDEVICE_PARAMS_W PSP_SELECTDEVICE_PARAMS;
  641. #else
  642. typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS;
  643. typedef PSP_SELECTDEVICE_PARAMS_A PSP_SELECTDEVICE_PARAMS;
  644. #endif
  645.  
  646.  
  647. //
  648. // 'Add New Device' installation wizard structure
  649. //
  650. // Structure corresponding to a DIF_INSTALLWIZARD install function.
  651. // (NOTE: This structure is also applicable for DIF_DESTROYWIZARDDATA,
  652. // but DIF_INSTALLWIZARD is the associated function code in the class
  653. // installation parameter structure in both cases.)
  654. //
  655. // Define maximum number of dynamic wizard pages that can be added to
  656. // hardware install wizard.
  657. //
  658. #define MAX_INSTALLWIZARD_DYNAPAGES             20
  659.  
  660. typedef struct _SP_INSTALLWIZARD_DATA {
  661.     SP_CLASSINSTALL_HEADER ClassInstallHeader;
  662.     DWORD                  Flags;
  663.     HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
  664.     DWORD                  NumDynamicPages;
  665.     DWORD                  DynamicPageFlags;
  666.     DWORD                  PrivateFlags;
  667.     LPARAM                 PrivateData;
  668.     HWND                   hwndWizardDlg;
  669. } SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
  670.  
  671. //
  672. // SP_INSTALLWIZARD_DATA.Flags values
  673. //
  674. #define NDW_INSTALLFLAG_DIDFACTDEFS         0x00000001
  675. #define NDW_INSTALLFLAG_HARDWAREALLREADYIN  0x00000002
  676. #define NDW_INSTALLFLAG_NEEDRESTART         DI_NEEDRESTART
  677. #define NDW_INSTALLFLAG_NEEDREBOOT          DI_NEEDREBOOT
  678. #define NDW_INSTALLFLAG_NEEDSHUTDOWN        0x00000200
  679. #define NDW_INSTALLFLAG_EXPRESSINTRO        0x00000400
  680. #define NDW_INSTALLFLAG_SKIPISDEVINSTALLED  0x00000800
  681. #define NDW_INSTALLFLAG_NODETECTEDDEVS      0x00001000
  682. #define NDW_INSTALLFLAG_INSTALLSPECIFIC     0x00002000
  683. #define NDW_INSTALLFLAG_SKIPCLASSLIST       0x00004000
  684. #define NDW_INSTALLFLAG_CI_PICKED_OEM       0x00008000
  685. #define NDW_INSTALLFLAG_PCMCIAMODE          0x00010000
  686. #define NDW_INSTALLFLAG_PCMCIADEVICE        0x00020000
  687. #define NDW_INSTALLFLAG_USERCANCEL          0x00040000
  688. #define NDW_INSTALLFLAG_KNOWNCLASS          0x00080000
  689.  
  690.  
  691. //
  692. // SP_INSTALLWIZARD_DATA.DynamicPageFlags values
  693. //
  694. // This flag is set if a Class installer has added pages to the
  695. // install wizard.
  696. //
  697. #define DYNAWIZ_FLAG_PAGESADDED             0x00000001
  698.  
  699. //
  700. // The following flags will control the button states when displaying
  701. // the InstallDetectedDevs dialog.
  702. //
  703. #define DYNAWIZ_FLAG_INSTALLDET_NEXT        0x00000002
  704. #define DYNAWIZ_FLAG_INSTALLDET_PREV        0x00000004
  705.  
  706. // Set this flag if you jump to the analyze page, and want it to
  707. // handle conflicts for you.  NOTE.  You will not get control back
  708. // in the event of a conflict if you set this flag.
  709. //
  710. // BUGBUG (lonnym): Not currently implemented!
  711. //
  712. #define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
  713.  
  714. //
  715. // Define wizard page resource IDs to be used when adding custom pages
  716. // to the hardware install wizard.
  717. //
  718. // Resource ID for the first page that the install wizard will go to after
  719. // adding the class installer pages.
  720. //
  721. #define IDD_DYNAWIZ_FIRSTPAGE                   10000
  722.  
  723. //
  724. // Resource ID for the page that the Select Device page will go back to.
  725. //
  726. #define IDD_DYNAWIZ_SELECT_PREVPAGE             10001
  727.  
  728. //
  729. // Resource ID for the page that the Select Device page will go forward to.
  730. //
  731. #define IDD_DYNAWIZ_SELECT_NEXTPAGE             10002
  732.  
  733. //
  734. // Resource ID for the page that the Analyze dialog should go back to
  735. // This will only be used in the event that there is a problem, and the user
  736. // selects Back from the analyze proc.
  737. //
  738. #define IDD_DYNAWIZ_ANALYZE_PREVPAGE            10003
  739.  
  740. //
  741. // Resource ID for the page that the Analyze dialog should go to if it
  742. // continue from the analyze proc.  the wAnalyzeResult in the INSTALLDATA
  743. // struct will contain the anaysis results.
  744. //
  745. #define IDD_DYNAWIZ_ANALYZE_NEXTPAGE            10004
  746.  
  747. //
  748. // Resource ID for that page that the Install detected devices page will go
  749. // back to.
  750. //
  751. #define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE    10006
  752.  
  753. //
  754. // Resource ID for the page that the Install detected devices page will go
  755. // forward to.
  756. //
  757. #define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE    10007
  758.  
  759. //
  760. // Resource ID for the page that the Install detected devices page will go
  761. // to in the event that no devices are detected.
  762. //
  763. #define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS      10008
  764.  
  765. //
  766. // Resource ID of the hardware install wizard's select device page.
  767. // This ID can be used to go directly to the hardware install wizard's select
  768. // device page.
  769. //
  770. #define IDD_DYNAWIZ_SELECTDEV_PAGE              10009
  771.  
  772. //
  773. // Resource ID of the hardware install wizard's device analysis page.
  774. // This ID can be use to go directly to the hardware install wizard's analysis
  775. // page.
  776. //
  777. #define IDD_DYNAWIZ_ANALYZEDEV_PAGE             10010
  778.  
  779. //
  780. // Resource ID of the hardware install wizard's install detected devices page.
  781. // This ID can be use to go directly to the hardware install wizard's install
  782. // detected devices page.
  783. //
  784. #define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE    10011
  785.  
  786. //
  787. // Resource ID of the hardware install wizard's select class page.
  788. // This ID can be use to go directly to the hardware install wizard's select
  789. // class page.
  790. //
  791. #define IDD_DYNAWIZ_SELECTCLASS_PAGE            10012
  792.  
  793.  
  794. //
  795. // Driver information structure (member of a driver info list that may be associated
  796. // with a particular device instance, or (globally) with a device information set)
  797. //
  798. typedef struct _SP_DRVINFO_DATA_A {
  799.     DWORD cbSize;
  800.     DWORD DriverType;
  801.     DWORD Reserved;
  802.     CHAR  Description[LINE_LEN];
  803.     CHAR  MfgName[LINE_LEN];
  804.     CHAR  ProviderName[LINE_LEN];
  805. } SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
  806.  
  807. typedef struct _SP_DRVINFO_DATA_W {
  808.     DWORD cbSize;
  809.     DWORD DriverType;
  810.     DWORD Reserved;
  811.     WCHAR Description[LINE_LEN];
  812.     WCHAR MfgName[LINE_LEN];
  813.     WCHAR ProviderName[LINE_LEN];
  814. } SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
  815.  
  816. #ifdef UNICODE
  817. typedef SP_DRVINFO_DATA_W SP_DRVINFO_DATA;
  818. typedef PSP_DRVINFO_DATA_W PSP_DRVINFO_DATA;
  819. #else
  820. typedef SP_DRVINFO_DATA_A SP_DRVINFO_DATA;
  821. typedef PSP_DRVINFO_DATA_A PSP_DRVINFO_DATA;
  822. #endif
  823.  
  824.  
  825. //
  826. // Driver information details structure (provides detailed information about a
  827. // particular driver information structure)
  828. //
  829. typedef struct _SP_DRVINFO_DETAIL_DATA_A {
  830.     DWORD    cbSize;
  831.     FILETIME InfDate;
  832.     DWORD    CompatIDsOffset;
  833.     DWORD    CompatIDsLength;
  834.     DWORD    Reserved;
  835.     CHAR     SectionName[LINE_LEN];
  836.     CHAR     InfFileName[MAX_PATH];
  837.     CHAR     DrvDescription[LINE_LEN];
  838.     CHAR     HardwareID[ANYSIZE_ARRAY];
  839. } SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
  840.  
  841. typedef struct _SP_DRVINFO_DETAIL_DATA_W {
  842.     DWORD    cbSize;
  843.     FILETIME InfDate;
  844.     DWORD    CompatIDsOffset;
  845.     DWORD    CompatIDsLength;
  846.     DWORD    Reserved;
  847.     WCHAR    SectionName[LINE_LEN];
  848.     WCHAR    InfFileName[MAX_PATH];
  849.     WCHAR    DrvDescription[LINE_LEN];
  850.     WCHAR    HardwareID[ANYSIZE_ARRAY];
  851. } SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
  852.  
  853. #ifdef UNICODE
  854. typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA;
  855. typedef PSP_DRVINFO_DETAIL_DATA_W PSP_DRVINFO_DETAIL_DATA;
  856. #else
  857. typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA;
  858. typedef PSP_DRVINFO_DETAIL_DATA_A PSP_DRVINFO_DETAIL_DATA;
  859. #endif
  860.  
  861.  
  862. //
  863. // Driver installation parameters (associated with a particular driver
  864. // information element)
  865. //
  866. typedef struct _SP_DRVINSTALL_PARAMS {
  867.     DWORD cbSize;
  868.     DWORD Rank;
  869.     DWORD Flags;
  870.     DWORD PrivateData;
  871.     DWORD Reserved;
  872. } SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;
  873.  
  874. //
  875. // SP_DRVINSTALL_PARAMS.Flags values
  876. //
  877. #define DNF_DUPDESC         0x00000001   // Multiple providers have same desc
  878. #define DNF_OLDDRIVER       0x00000002   // Driver node specifies old/current driver
  879. #define DNF_EXCLUDEFROMLIST 0x00000004   // If set, this driver node will not be
  880.                                          // displayed in any driver select dialogs.
  881. #define DNF_NODRIVER        0x00000008   // if we want to install no driver
  882.                                          // (e.g no mouse drv)
  883. #define DNF_LEGACYINF       0x00000010   // this driver node comes from an old-style INF
  884.  
  885.  
  886. //
  887. // Setup callback routine for comparing detection signatures
  888. //
  889. typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)(
  890.     IN HDEVINFO         DeviceInfoSet,
  891.     IN PSP_DEVINFO_DATA NewDeviceData,
  892.     IN PSP_DEVINFO_DATA ExistingDeviceData,
  893.     IN PVOID            CompareContext      OPTIONAL
  894.     );
  895.  
  896.  
  897. //
  898. // Structure containing class image list information.
  899. //
  900. typedef struct _SP_CLASSIMAGELIST_DATA {
  901.     DWORD      cbSize;
  902.     HIMAGELIST ImageList;
  903.     DWORD      Reserved;
  904. } SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
  905.  
  906.  
  907. //
  908. // Structure to be passed as first parameter (LPVOID lpv) to ExtensionPropSheetPageProc
  909. // entry point in setupapi.dll.  Used to retrieve a handle for a specified property page.
  910. //
  911. typedef struct _SP_PROPSHEETPAGE_REQUEST {
  912.     DWORD            cbSize;
  913.     DWORD            PageRequested;
  914.     HDEVINFO         DeviceInfoSet;
  915.     PSP_DEVINFO_DATA DeviceInfoData;
  916. } SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
  917.  
  918. //
  919. // Property sheet codes used in SP_PROPSHEETPAGE_REQUEST.PageRequested
  920. //
  921. #define SPPSR_SELECT_DEVICE_RESOURCES  1
  922.  
  923.  
  924. //
  925. // Setupapi-specific error codes
  926. //
  927. // Inf parse outcomes
  928. //
  929. #define ERROR_EXPECTED_SECTION_NAME  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
  930. #define ERROR_BAD_SECTION_NAME_LINE  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
  931. #define ERROR_SECTION_NAME_TOO_LONG  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
  932. #define ERROR_GENERAL_SYNTAX         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
  933. //
  934. // Inf runtime errors
  935. //
  936. #define ERROR_WRONG_INF_STYLE        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
  937. #define ERROR_SECTION_NOT_FOUND      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
  938. #define ERROR_LINE_NOT_FOUND         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
  939. //
  940. // Device Installer errors
  941. //
  942. #define ERROR_NO_ASSOCIATED_CLASS     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
  943. #define ERROR_CLASS_MISMATCH          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
  944. #define ERROR_DUPLICATE_FOUND         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
  945. #define ERROR_NO_DRIVER_SELECTED      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
  946. #define ERROR_KEY_DOES_NOT_EXIST      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
  947. #define ERROR_INVALID_DEVINST_NAME    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
  948. #define ERROR_INVALID_CLASS           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
  949. #define ERROR_DEVINST_ALREADY_EXISTS  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
  950. #define ERROR_DEVINFO_NOT_REGISTERED  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
  951. #define ERROR_INVALID_REG_PROPERTY    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
  952. #define ERROR_NO_INF                  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
  953. #define ERROR_NO_SUCH_DEVINST         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
  954. #define ERROR_CANT_LOAD_CLASS_ICON    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
  955. #define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
  956. #define ERROR_DI_DO_DEFAULT           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
  957. #define ERROR_DI_NOFILECOPY           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
  958. #define ERROR_INVALID_HWPROFILE       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
  959. #define ERROR_NO_DEVICE_SELECTED      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
  960. #define ERROR_DEVINFO_LIST_LOCKED     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
  961. #define ERROR_DEVINFO_DATA_LOCKED     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
  962. #define ERROR_DI_BAD_PATH             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
  963. #define ERROR_NO_CLASSINSTALL_PARAMS  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
  964. #define ERROR_FILEQUEUE_LOCKED        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
  965. #define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
  966. #define ERROR_NO_CLASS_DRIVER_LIST    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
  967. #define ERROR_NO_ASSOCIATED_SERVICE   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
  968.  
  969.  
  970. WINSETUPAPI
  971. BOOL
  972. WINAPI
  973. SetupGetInfInformationA(
  974.     IN  LPCVOID             InfSpec,
  975.     IN  DWORD               SearchControl,
  976.     OUT PSP_INF_INFORMATION ReturnBuffer,     OPTIONAL
  977.     IN  DWORD               ReturnBufferSize,
  978.     OUT PDWORD              RequiredSize      OPTIONAL
  979.     );
  980.  
  981. WINSETUPAPI
  982. BOOL
  983. WINAPI
  984. SetupGetInfInformationW(
  985.     IN  LPCVOID             InfSpec,
  986.     IN  DWORD               SearchControl,
  987.     OUT PSP_INF_INFORMATION ReturnBuffer,     OPTIONAL
  988.     IN  DWORD               ReturnBufferSize,
  989.     OUT PDWORD              RequiredSize      OPTIONAL
  990.     );
  991.  
  992. //
  993. // SearchControl flags for SetupGetInfInformation
  994. //
  995. #define INFINFO_INF_SPEC_IS_HINF        1
  996. #define INFINFO_INF_NAME_IS_ABSOLUTE    2
  997. #define INFINFO_DEFAULT_SEARCH          3
  998. #define INFINFO_REVERSE_DEFAULT_SEARCH  4
  999. #define INFINFO_INF_PATH_LIST_SEARCH    5
  1000.  
  1001. #ifdef UNICODE
  1002. #define SetupGetInfInformation SetupGetInfInformationW
  1003. #else
  1004. #define SetupGetInfInformation SetupGetInfInformationA
  1005. #endif
  1006.  
  1007.  
  1008. WINSETUPAPI
  1009. BOOL
  1010. WINAPI
  1011. SetupQueryInfFileInformationA(
  1012.     IN  PSP_INF_INFORMATION InfInformation,
  1013.     IN  UINT                InfIndex,
  1014.     OUT PSTR                ReturnBuffer,     OPTIONAL
  1015.     IN  DWORD               ReturnBufferSize,
  1016.     OUT PDWORD              RequiredSize      OPTIONAL
  1017.     );
  1018.  
  1019. WINSETUPAPI
  1020. BOOL
  1021. WINAPI
  1022. SetupQueryInfFileInformationW(
  1023.     IN  PSP_INF_INFORMATION InfInformation,
  1024.     IN  UINT                InfIndex,
  1025.     OUT PWSTR               ReturnBuffer,     OPTIONAL
  1026.     IN  DWORD               ReturnBufferSize,
  1027.     OUT PDWORD              RequiredSize      OPTIONAL
  1028.     );
  1029.  
  1030. #ifdef UNICODE
  1031. #define SetupQueryInfFileInformation SetupQueryInfFileInformationW
  1032. #else
  1033. #define SetupQueryInfFileInformation SetupQueryInfFileInformationA
  1034. #endif
  1035.  
  1036.  
  1037. WINSETUPAPI
  1038. BOOL
  1039. WINAPI
  1040. SetupQueryInfVersionInformationA(
  1041.     IN  PSP_INF_INFORMATION InfInformation,
  1042.     IN  UINT                InfIndex,
  1043.     IN  PCSTR               Key,              OPTIONAL
  1044.     OUT PSTR                ReturnBuffer,     OPTIONAL
  1045.     IN  DWORD               ReturnBufferSize,
  1046.     OUT PDWORD              RequiredSize      OPTIONAL
  1047.     );
  1048.  
  1049. WINSETUPAPI
  1050. BOOL
  1051. WINAPI
  1052. SetupQueryInfVersionInformationW(
  1053.     IN  PSP_INF_INFORMATION InfInformation,
  1054.     IN  UINT                InfIndex,
  1055.     IN  PCWSTR              Key,              OPTIONAL
  1056.     OUT PWSTR               ReturnBuffer,     OPTIONAL
  1057.     IN  DWORD               ReturnBufferSize,
  1058.     OUT PDWORD              RequiredSize      OPTIONAL
  1059.     );
  1060.  
  1061. #ifdef UNICODE
  1062. #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW
  1063. #else
  1064. #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA
  1065. #endif
  1066.  
  1067.  
  1068. WINSETUPAPI
  1069. BOOL
  1070. WINAPI
  1071. SetupGetInfFileListA(
  1072.     IN  PCSTR  DirectoryPath,    OPTIONAL
  1073.     IN  DWORD  InfStyle,
  1074.     OUT PSTR   ReturnBuffer,     OPTIONAL
  1075.     IN  DWORD  ReturnBufferSize,
  1076.     OUT PDWORD RequiredSize      OPTIONAL
  1077.     );
  1078.  
  1079. WINSETUPAPI
  1080. BOOL
  1081. WINAPI
  1082. SetupGetInfFileListW(
  1083.     IN  PCWSTR DirectoryPath,    OPTIONAL
  1084.     IN  DWORD  InfStyle,
  1085.     OUT PWSTR  ReturnBuffer,     OPTIONAL
  1086.     IN  DWORD  ReturnBufferSize,
  1087.     OUT PDWORD RequiredSize      OPTIONAL
  1088.     );
  1089.  
  1090. #ifdef UNICODE
  1091. #define SetupGetInfFileList SetupGetInfFileListW
  1092. #else
  1093. #define SetupGetInfFileList SetupGetInfFileListA
  1094. #endif
  1095.  
  1096.  
  1097. WINSETUPAPI
  1098. HINF
  1099. WINAPI
  1100. SetupOpenInfFileW(
  1101.     IN  PCWSTR FileName,
  1102.     IN  PCWSTR InfClass,    OPTIONAL
  1103.     IN  DWORD  InfStyle,
  1104.     OUT PUINT  ErrorLine    OPTIONAL
  1105.     );
  1106.  
  1107. WINSETUPAPI
  1108. HINF
  1109. WINAPI
  1110. SetupOpenInfFileA(
  1111.     IN  PCSTR FileName,
  1112.     IN  PCSTR InfClass,     OPTIONAL
  1113.     IN  DWORD InfStyle,
  1114.     OUT PUINT ErrorLine     OPTIONAL
  1115.     );
  1116.  
  1117. #ifdef UNICODE
  1118. #define SetupOpenInfFile SetupOpenInfFileW
  1119. #else
  1120. #define SetupOpenInfFile SetupOpenInfFileA
  1121. #endif
  1122.  
  1123.  
  1124. WINSETUPAPI
  1125. HINF
  1126. WINAPI
  1127. SetupOpenMasterInf(
  1128.     VOID
  1129.     );
  1130.  
  1131.  
  1132. WINSETUPAPI
  1133. BOOL
  1134. WINAPI
  1135. SetupOpenAppendInfFileW(
  1136.     IN  PCWSTR FileName,    OPTIONAL
  1137.     IN  HINF   InfHandle,
  1138.     OUT PUINT  ErrorLine    OPTIONAL
  1139.     );
  1140.  
  1141. WINSETUPAPI
  1142. BOOL
  1143. WINAPI
  1144. SetupOpenAppendInfFileA(
  1145.     IN  PCSTR FileName,     OPTIONAL
  1146.     IN  HINF  InfHandle,
  1147.     OUT PUINT ErrorLine     OPTIONAL
  1148.     );
  1149.  
  1150. #ifdef UNICODE
  1151. #define SetupOpenAppendInfFile SetupOpenAppendInfFileW
  1152. #else
  1153. #define SetupOpenAppendInfFile SetupOpenAppendInfFileA
  1154. #endif
  1155.  
  1156.  
  1157. WINSETUPAPI
  1158. VOID
  1159. WINAPI
  1160. SetupCloseInfFile(
  1161.     IN HINF InfHandle
  1162.     );
  1163.  
  1164.  
  1165. WINSETUPAPI
  1166. BOOL
  1167. WINAPI
  1168. SetupFindFirstLineA(
  1169.     IN  HINF        InfHandle,
  1170.     IN  PCSTR       Section,
  1171.     IN  PCSTR       Key,          OPTIONAL
  1172.     OUT PINFCONTEXT Context
  1173.     );
  1174.  
  1175. WINSETUPAPI
  1176. BOOL
  1177. WINAPI
  1178. SetupFindFirstLineW(
  1179.     IN  HINF        InfHandle,
  1180.     IN  PCWSTR      Section,
  1181.     IN  PCWSTR      Key,          OPTIONAL
  1182.     OUT PINFCONTEXT Context
  1183.     );
  1184.  
  1185. #ifdef UNICODE
  1186. #define SetupFindFirstLine SetupFindFirstLineW
  1187. #else
  1188. #define SetupFindFirstLine SetupFindFirstLineA
  1189. #endif
  1190.  
  1191.  
  1192. WINSETUPAPI
  1193. BOOL
  1194. WINAPI
  1195. SetupFindNextLine(
  1196.     IN  PINFCONTEXT ContextIn,
  1197.     OUT PINFCONTEXT ContextOut
  1198.     );
  1199.  
  1200.  
  1201. WINSETUPAPI
  1202. BOOL
  1203. WINAPI
  1204. SetupFindNextMatchLineA(
  1205.     IN  PINFCONTEXT ContextIn,
  1206.     IN  PCSTR       Key,        OPTIONAL
  1207.     OUT PINFCONTEXT ContextOut
  1208.     );
  1209.  
  1210. WINSETUPAPI
  1211. BOOL
  1212. WINAPI
  1213. SetupFindNextMatchLineW(
  1214.     IN  PINFCONTEXT ContextIn,
  1215.     IN  PCWSTR      Key,        OPTIONAL
  1216.     OUT PINFCONTEXT ContextOut
  1217.     );
  1218.  
  1219. #ifdef UNICODE
  1220. #define SetupFindNextMatchLine SetupFindNextMatchLineW
  1221. #else
  1222. #define SetupFindNextMatchLine SetupFindNextMatchLineA
  1223. #endif
  1224.  
  1225.  
  1226. WINSETUPAPI
  1227. BOOL
  1228. WINAPI
  1229. SetupGetLineByIndexA(
  1230.     IN  HINF        InfHandle,
  1231.     IN  PCSTR       Section,
  1232.     IN  DWORD       Index,
  1233.     OUT PINFCONTEXT Context
  1234.     );
  1235.  
  1236. WINSETUPAPI
  1237. BOOL
  1238. WINAPI
  1239. SetupGetLineByIndexW(
  1240.     IN  HINF        InfHandle,
  1241.     IN  PCWSTR      Section,
  1242.     IN  DWORD       Index,
  1243.     OUT PINFCONTEXT Context
  1244.     );
  1245.  
  1246. #ifdef UNICODE
  1247. #define SetupGetLineByIndex SetupGetLineByIndexW
  1248. #else
  1249. #define SetupGetLineByIndex SetupGetLineByIndexA
  1250. #endif
  1251.  
  1252.  
  1253. WINSETUPAPI
  1254. LONG
  1255. WINAPI
  1256. SetupGetLineCountA(
  1257.     IN HINF  InfHandle,
  1258.     IN PCSTR Section
  1259.     );
  1260.  
  1261. WINSETUPAPI
  1262. LONG
  1263. WINAPI
  1264. SetupGetLineCountW(
  1265.     IN HINF   InfHandle,
  1266.     IN PCWSTR Section
  1267.     );
  1268.  
  1269. #ifdef UNICODE
  1270. #define SetupGetLineCount SetupGetLineCountW
  1271. #else
  1272. #define SetupGetLineCount SetupGetLineCountA
  1273. #endif
  1274.  
  1275.  
  1276. WINSETUPAPI
  1277. BOOL
  1278. WINAPI
  1279. SetupGetLineTextA(
  1280.     IN  PINFCONTEXT Context,          OPTIONAL
  1281.     IN  HINF        InfHandle,        OPTIONAL
  1282.     IN  PCSTR       Section,          OPTIONAL
  1283.     IN  PCSTR       Key,              OPTIONAL
  1284.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1285.     IN  DWORD       ReturnBufferSize,
  1286.     OUT PDWORD      RequiredSize      OPTIONAL
  1287.     );
  1288.  
  1289. WINSETUPAPI
  1290. BOOL
  1291. WINAPI
  1292. SetupGetLineTextW(
  1293.     IN  PINFCONTEXT Context,          OPTIONAL
  1294.     IN  HINF        InfHandle,        OPTIONAL
  1295.     IN  PCWSTR      Section,          OPTIONAL
  1296.     IN  PCWSTR      Key,              OPTIONAL
  1297.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1298.     IN  DWORD       ReturnBufferSize,
  1299.     OUT PDWORD      RequiredSize      OPTIONAL
  1300.     );
  1301.  
  1302. #ifdef UNICODE
  1303. #define SetupGetLineText SetupGetLineTextW
  1304. #else
  1305. #define SetupGetLineText SetupGetLineTextA
  1306. #endif
  1307.  
  1308.  
  1309. WINSETUPAPI
  1310. DWORD
  1311. WINAPI
  1312. SetupGetFieldCount(
  1313.     IN PINFCONTEXT Context
  1314.     );
  1315.  
  1316.  
  1317. WINSETUPAPI
  1318. BOOL
  1319. WINAPI
  1320. SetupGetStringFieldA(
  1321.     IN  PINFCONTEXT Context,
  1322.     IN  DWORD       FieldIndex,
  1323.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1324.     IN  DWORD       ReturnBufferSize,
  1325.     OUT PDWORD      RequiredSize      OPTIONAL
  1326.     );
  1327.  
  1328. WINSETUPAPI
  1329. BOOL
  1330. WINAPI
  1331. SetupGetStringFieldW(
  1332.     IN  PINFCONTEXT Context,
  1333.     IN  DWORD       FieldIndex,
  1334.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1335.     IN  DWORD       ReturnBufferSize,
  1336.     OUT PDWORD      RequiredSize      OPTIONAL
  1337.     );
  1338.  
  1339. #ifdef UNICODE
  1340. #define SetupGetStringField SetupGetStringFieldW
  1341. #else
  1342. #define SetupGetStringField SetupGetStringFieldA
  1343. #endif
  1344.  
  1345.  
  1346. WINSETUPAPI
  1347. BOOL
  1348. WINAPI
  1349. SetupGetIntField(
  1350.     IN  PINFCONTEXT Context,
  1351.     IN  DWORD       FieldIndex,
  1352.     OUT PINT        IntegerValue
  1353.     );
  1354.  
  1355.  
  1356. WINSETUPAPI
  1357. BOOL
  1358. WINAPI
  1359. SetupGetMultiSzFieldA(
  1360.     IN  PINFCONTEXT Context,
  1361.     IN  DWORD       FieldIndex,
  1362.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1363.     IN  DWORD       ReturnBufferSize,
  1364.     OUT LPDWORD     RequiredSize      OPTIONAL
  1365.     );
  1366.  
  1367. WINSETUPAPI
  1368. BOOL
  1369. WINAPI
  1370. SetupGetMultiSzFieldW(
  1371.     IN  PINFCONTEXT Context,
  1372.     IN  DWORD       FieldIndex,
  1373.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1374.     IN  DWORD       ReturnBufferSize,
  1375.     OUT LPDWORD     RequiredSize      OPTIONAL
  1376.     );
  1377.  
  1378. #ifdef UNICODE
  1379. #define SetupGetMultiSzField SetupGetMultiSzFieldW
  1380. #else
  1381. #define SetupGetMultiSzField SetupGetMultiSzFieldA
  1382. #endif
  1383.  
  1384.  
  1385. WINSETUPAPI
  1386. BOOL
  1387. WINAPI
  1388. SetupGetBinaryField(
  1389.     IN  PINFCONTEXT Context,
  1390.     IN  DWORD       FieldIndex,
  1391.     OUT PBYTE       ReturnBuffer,     OPTIONAL
  1392.     IN  DWORD       ReturnBufferSize,
  1393.     OUT LPDWORD     RequiredSize      OPTIONAL
  1394.     );
  1395.  
  1396.  
  1397. WINSETUPAPI
  1398. DWORD
  1399. WINAPI
  1400. SetupGetFileCompressionInfoA(
  1401.     IN  PCSTR   SourceFileName,
  1402.     OUT PSTR   *ActualSourceFileName,
  1403.     OUT PDWORD  SourceFileSize,
  1404.     OUT PDWORD  TargetFileSize,
  1405.     OUT PUINT   CompressionType
  1406.     );
  1407.  
  1408. WINSETUPAPI
  1409. DWORD
  1410. WINAPI
  1411. SetupGetFileCompressionInfoW(
  1412.     IN  PCWSTR  SourceFileName,
  1413.     OUT PWSTR  *ActualSourceFileName,
  1414.     OUT PDWORD  SourceFileSize,
  1415.     OUT PDWORD  TargetFileSize,
  1416.     OUT PUINT   CompressionType
  1417.     );
  1418.  
  1419. #ifdef UNICODE
  1420. #define SetupGetFileCompressionInfo SetupGetFileCompressionInfoW
  1421. #else
  1422. #define SetupGetFileCompressionInfo SetupGetFileCompressionInfoA
  1423. #endif
  1424.  
  1425.  
  1426. //
  1427. // Compression types
  1428. //
  1429. #define FILE_COMPRESSION_NONE       0
  1430. #define FILE_COMPRESSION_WINLZA     1
  1431. #define FILE_COMPRESSION_MSZIP      2
  1432.  
  1433.  
  1434. WINSETUPAPI
  1435. DWORD
  1436. WINAPI
  1437. SetupDecompressOrCopyFileA(
  1438.     IN PCSTR SourceFileName,
  1439.     IN PCSTR TargetFileName,
  1440.     IN PUINT CompressionType OPTIONAL
  1441.     );
  1442.  
  1443. WINSETUPAPI
  1444. DWORD
  1445. WINAPI
  1446. SetupDecompressOrCopyFileW(
  1447.     IN PCWSTR SourceFileName,
  1448.     IN PCWSTR TargetFileName,
  1449.     IN PUINT  CompressionType OPTIONAL
  1450.     );
  1451.  
  1452. #ifdef UNICODE
  1453. #define SetupDecompressOrCopyFile SetupDecompressOrCopyFileW
  1454. #else
  1455. #define SetupDecompressOrCopyFile SetupDecompressOrCopyFileA
  1456. #endif
  1457.  
  1458.  
  1459. WINSETUPAPI
  1460. BOOL
  1461. WINAPI
  1462. SetupGetSourceFileLocationA(
  1463.     IN  HINF        InfHandle,
  1464.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1465.     IN  PCSTR       FileName,         OPTIONAL
  1466.     OUT PUINT       SourceId,
  1467.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1468.     IN  DWORD       ReturnBufferSize,
  1469.     OUT PDWORD      RequiredSize      OPTIONAL
  1470.     );
  1471.  
  1472. WINSETUPAPI
  1473. BOOL
  1474. WINAPI
  1475. SetupGetSourceFileLocationW(
  1476.     IN  HINF        InfHandle,
  1477.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1478.     IN  PCWSTR      FileName,         OPTIONAL
  1479.     OUT PUINT       SourceId,
  1480.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1481.     IN  DWORD       ReturnBufferSize,
  1482.     OUT PDWORD      RequiredSize      OPTIONAL
  1483.     );
  1484.  
  1485. #ifdef UNICODE
  1486. #define SetupGetSourceFileLocation SetupGetSourceFileLocationW
  1487. #else
  1488. #define SetupGetSourceFileLocation SetupGetSourceFileLocationA
  1489. #endif
  1490.  
  1491.  
  1492. WINSETUPAPI
  1493. BOOL
  1494. WINAPI
  1495. SetupGetSourceFileSizeA(
  1496.     IN  HINF        InfHandle,
  1497.     IN  PINFCONTEXT InfContext,     OPTIONAL
  1498.     IN  PCSTR       FileName,       OPTIONAL
  1499.     IN  PCSTR       Section,        OPTIONAL
  1500.     OUT PDWORD      FileSize,
  1501.     IN  UINT        RoundingFactor  OPTIONAL
  1502.     );
  1503.  
  1504. WINSETUPAPI
  1505. BOOL
  1506. WINAPI
  1507. SetupGetSourceFileSizeW(
  1508.     IN  HINF        InfHandle,
  1509.     IN  PINFCONTEXT InfContext,     OPTIONAL
  1510.     IN  PCWSTR      FileName,       OPTIONAL
  1511.     IN  PCWSTR      Section,        OPTIONAL
  1512.     OUT PDWORD      FileSize,
  1513.     IN  UINT        RoundingFactor  OPTIONAL
  1514.     );
  1515.  
  1516. #ifdef UNICODE
  1517. #define SetupGetSourceFileSize SetupGetSourceFileSizeW
  1518. #else
  1519. #define SetupGetSourceFileSize SetupGetSourceFileSizeA
  1520. #endif
  1521.  
  1522.  
  1523. WINSETUPAPI
  1524. BOOL
  1525. WINAPI
  1526. SetupGetTargetPathA(
  1527.     IN  HINF        InfHandle,
  1528.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1529.     IN  PCSTR       Section,          OPTIONAL
  1530.     OUT PSTR        ReturnBuffer,     OPTIONAL
  1531.     IN  DWORD       ReturnBufferSize,
  1532.     OUT PDWORD      RequiredSize      OPTIONAL
  1533.     );
  1534.  
  1535. WINSETUPAPI
  1536. BOOL
  1537. WINAPI
  1538. SetupGetTargetPathW(
  1539.     IN  HINF        InfHandle,
  1540.     IN  PINFCONTEXT InfContext,       OPTIONAL
  1541.     IN  PCWSTR      Section,          OPTIONAL
  1542.     OUT PWSTR       ReturnBuffer,     OPTIONAL
  1543.     IN  DWORD       ReturnBufferSize,
  1544.     OUT PDWORD      RequiredSize      OPTIONAL
  1545.     );
  1546.  
  1547. #ifdef UNICODE
  1548. #define SetupGetTargetPath SetupGetTargetPathW
  1549. #else
  1550. #define SetupGetTargetPath SetupGetTargetPathA
  1551. #endif
  1552.  
  1553.  
  1554. //
  1555. // Define flags for SourceList APIs.
  1556. //
  1557. #define SRCLIST_TEMPORARY       0x00000001
  1558. #define SRCLIST_NOBROWSE        0x00000002
  1559. #define SRCLIST_SYSTEM          0x00000010
  1560. #define SRCLIST_USER            0x00000020
  1561. #define SRCLIST_SYSIFADMIN      0x00000040
  1562. #define SRCLIST_SUBDIRS         0x00000100
  1563. #define SRCLIST_APPEND          0x00000200
  1564. #define SRCLIST_NOSTRIPPLATFORM 0x00000400
  1565.  
  1566.  
  1567. WINSETUPAPI
  1568. BOOL
  1569. WINAPI
  1570. SetupSetSourceListA(
  1571.     IN DWORD  Flags,
  1572.     IN PCSTR *SourceList,
  1573.     IN UINT   SourceCount
  1574.     );
  1575.  
  1576. WINSETUPAPI
  1577. BOOL
  1578. WINAPI
  1579. SetupSetSourceListW(
  1580.     IN DWORD   Flags,
  1581.     IN PCWSTR *SourceList,
  1582.     IN UINT    SourceCount
  1583.     );
  1584.  
  1585. #ifdef UNICODE
  1586. #define SetupSetSourceList SetupSetSourceListW
  1587. #else
  1588. #define SetupSetSourceList SetupSetSourceListA
  1589. #endif
  1590.  
  1591.  
  1592. WINSETUPAPI
  1593. BOOL
  1594. WINAPI
  1595. SetupCancelTemporarySourceList(
  1596.     VOID
  1597.     );
  1598.  
  1599.  
  1600. WINSETUPAPI
  1601. BOOL
  1602. WINAPI
  1603. SetupAddToSourceListA(
  1604.     IN DWORD Flags,
  1605.     IN PCSTR Source
  1606.     );
  1607.  
  1608. WINSETUPAPI
  1609. BOOL
  1610. WINAPI
  1611. SetupAddToSourceListW(
  1612.     IN DWORD  Flags,
  1613.     IN PCWSTR Source
  1614.     );
  1615.  
  1616. #ifdef UNICODE
  1617. #define SetupAddToSourceList SetupAddToSourceListW
  1618. #else
  1619. #define SetupAddToSourceList SetupAddToSourceListA
  1620. #endif
  1621.  
  1622.  
  1623. WINSETUPAPI
  1624. BOOL
  1625. WINAPI
  1626. SetupRemoveFromSourceListA(
  1627.     IN DWORD Flags,
  1628.     IN PCSTR Source
  1629.     );
  1630.  
  1631. WINSETUPAPI
  1632. BOOL
  1633. WINAPI
  1634. SetupRemoveFromSourceListW(
  1635.     IN DWORD  Flags,
  1636.     IN PCWSTR Source
  1637.     );
  1638.  
  1639. #ifdef UNICODE
  1640. #define SetupRemoveFromSourceList SetupRemoveFromSourceListW
  1641. #else
  1642. #define SetupRemoveFromSourceList SetupRemoveFromSourceListA
  1643. #endif
  1644.  
  1645.  
  1646. WINSETUPAPI
  1647. BOOL
  1648. WINAPI
  1649. SetupQuerySourceListA(
  1650.     IN  DWORD   Flags,
  1651.     OUT PCSTR **List,
  1652.     OUT PUINT   Count
  1653.     );
  1654.  
  1655. WINSETUPAPI
  1656. BOOL
  1657. WINAPI
  1658. SetupQuerySourceListW(
  1659.     IN  DWORD    Flags,
  1660.     OUT PCWSTR **List,
  1661.     OUT PUINT    Count
  1662.     );
  1663.  
  1664. #ifdef UNICODE
  1665. #define SetupQuerySourceList SetupQuerySourceListW
  1666. #else
  1667. #define SetupQuerySourceList SetupQuerySourceListA
  1668. #endif
  1669.  
  1670.  
  1671. WINSETUPAPI
  1672. BOOL
  1673. WINAPI
  1674. SetupFreeSourceListA(
  1675.     IN OUT PCSTR **List,
  1676.     IN     UINT    Count
  1677.     );
  1678.  
  1679. WINSETUPAPI
  1680. BOOL
  1681. WINAPI
  1682. SetupFreeSourceListW(
  1683.     IN OUT PCWSTR **List,
  1684.     IN     UINT     Count
  1685.     );
  1686.  
  1687. #ifdef UNICODE
  1688. #define SetupFreeSourceList SetupFreeSourceListW
  1689. #else
  1690. #define SetupFreeSourceList SetupFreeSourceListA
  1691. #endif
  1692.  
  1693.  
  1694. WINSETUPAPI
  1695. UINT
  1696. WINAPI
  1697. SetupPromptForDiskA(
  1698.     IN  HWND   hwndParent,
  1699.     IN  PCSTR  DialogTitle,      OPTIONAL
  1700.     IN  PCSTR  DiskName,         OPTIONAL
  1701.     IN  PCSTR  PathToSource,     OPTIONAL
  1702.     IN  PCSTR  FileSought,
  1703.     IN  PCSTR  TagFile,          OPTIONAL
  1704.     IN  DWORD  DiskPromptStyle,
  1705.     OUT PSTR   PathBuffer,
  1706.     IN  DWORD  PathBufferSize,
  1707.     OUT PDWORD PathRequiredSize
  1708.     );
  1709.  
  1710. WINSETUPAPI
  1711. UINT
  1712. WINAPI
  1713. SetupPromptForDiskW(
  1714.     IN  HWND   hwndParent,
  1715.     IN  PCWSTR DialogTitle,      OPTIONAL
  1716.     IN  PCWSTR DiskName,         OPTIONAL
  1717.     IN  PCWSTR PathToSource,     OPTIONAL
  1718.     IN  PCWSTR FileSought,
  1719.     IN  PCWSTR TagFile,          OPTIONAL
  1720.     IN  DWORD  DiskPromptStyle,
  1721.     OUT PWSTR  PathBuffer,
  1722.     IN  DWORD  PathBufferSize,
  1723.     OUT PDWORD PathRequiredSize
  1724.     );
  1725.  
  1726. #ifdef UNICODE
  1727. #define SetupPromptForDisk SetupPromptForDiskW
  1728. #else
  1729. #define SetupPromptForDisk SetupPromptForDiskA
  1730. #endif
  1731.  
  1732.  
  1733. WINSETUPAPI
  1734. UINT
  1735. WINAPI
  1736. SetupCopyErrorA(
  1737.     IN  HWND   hwndParent,
  1738.     IN  PCSTR  DialogTitle,     OPTIONAL
  1739.     IN  PCSTR  DiskName,        OPTIONAL
  1740.     IN  PCSTR  PathToSource,
  1741.     IN  PCSTR  SourceFile,
  1742.     IN  PCSTR  TargetPathFile,  OPTIONAL
  1743.     IN  UINT   Win32ErrorCode,
  1744.     IN  DWORD  Style,
  1745.     OUT PSTR   PathBuffer,      OPTIONAL
  1746.     IN  DWORD  PathBufferSize,
  1747.     OUT PDWORD PathRequiredSize OPTIONAL
  1748.     );
  1749.  
  1750. WINSETUPAPI
  1751. UINT
  1752. WINAPI
  1753. SetupCopyErrorW(
  1754.     IN  HWND   hwndParent,
  1755.     IN  PCWSTR DialogTitle,     OPTIONAL
  1756.     IN  PCWSTR DiskName,        OPTIONAL
  1757.     IN  PCWSTR PathToSource,
  1758.     IN  PCWSTR SourceFile,
  1759.     IN  PCWSTR TargetPathFile,  OPTIONAL
  1760.     IN  UINT   Win32ErrorCode,
  1761.     IN  DWORD  Style,
  1762.     OUT PWSTR  PathBuffer,      OPTIONAL
  1763.     IN  DWORD  PathBufferSize,
  1764.     OUT PDWORD PathRequiredSize OPTIONAL
  1765.     );
  1766.  
  1767. #ifdef UNICODE
  1768. #define SetupCopyError SetupCopyErrorW
  1769. #else
  1770. #define SetupCopyError SetupCopyErrorA
  1771. #endif
  1772.  
  1773.  
  1774. WINSETUPAPI
  1775. UINT
  1776. WINAPI
  1777. SetupRenameErrorA(
  1778.     IN  HWND   hwndParent,
  1779.     IN  PCSTR  DialogTitle,     OPTIONAL
  1780.     IN  PCSTR  SourceFile,
  1781.     IN  PCSTR  TargetFile,
  1782.     IN  UINT   Win32ErrorCode,
  1783.     IN  DWORD  Style
  1784.     );
  1785.  
  1786. WINSETUPAPI
  1787. UINT
  1788. WINAPI
  1789. SetupRenameErrorW(
  1790.     IN  HWND   hwndParent,
  1791.     IN  PCWSTR DialogTitle,     OPTIONAL
  1792.     IN  PCWSTR SourceFile,
  1793.     IN  PCWSTR TargetFile,
  1794.     IN  UINT   Win32ErrorCode,
  1795.     IN  DWORD  Style
  1796.     );
  1797.  
  1798. #ifdef UNICODE
  1799. #define SetupRenameError SetupRenameErrorW
  1800. #else
  1801. #define SetupRenameError SetupRenameErrorA
  1802. #endif
  1803.  
  1804.  
  1805. WINSETUPAPI
  1806. UINT
  1807. WINAPI
  1808. SetupDeleteErrorA(
  1809.     IN  HWND   hwndParent,
  1810.     IN  PCSTR  DialogTitle,     OPTIONAL
  1811.     IN  PCSTR  File,
  1812.     IN  UINT   Win32ErrorCode,
  1813.     IN  DWORD  Style
  1814.     );
  1815.  
  1816. WINSETUPAPI
  1817. UINT
  1818. WINAPI
  1819. SetupDeleteErrorW(
  1820.     IN  HWND   hwndParent,
  1821.     IN  PCWSTR DialogTitle,     OPTIONAL
  1822.     IN  PCWSTR File,
  1823.     IN  UINT   Win32ErrorCode,
  1824.     IN  DWORD  Style
  1825.     );
  1826.  
  1827. #ifdef UNICODE
  1828. #define SetupDeleteError SetupDeleteErrorW
  1829. #else
  1830. #define SetupDeleteError SetupDeleteErrorA
  1831. #endif
  1832.  
  1833.  
  1834. //
  1835. // Styles for SetupPromptForDisk, SetupCopyError,
  1836. // SetupRenameError, SetupDeleteError
  1837. //
  1838. #define IDF_NOBROWSE        0x00000001
  1839. #define IDF_NOSKIP          0x00000002
  1840. #define IDF_NODETAILS       0x00000004
  1841. #define IDF_NOCOMPRESSED    0x00000008
  1842. #define IDF_CHECKFIRST      0x00000100
  1843. #define IDF_NOBEEP          0x00000200
  1844. #define IDF_NOFOREGROUND    0x00000400
  1845. #define IDF_WARNIFSKIP      0x00000800
  1846. #define IDF_OEMDISK         0x80000000
  1847.  
  1848. //
  1849. // Return values for SetupPromptForDisk, SetupCopyError,
  1850. // SetupRenameError, SetupDeleteError
  1851. //
  1852. #define DPROMPT_SUCCESS         0
  1853. #define DPROMPT_CANCEL          1
  1854. #define DPROMPT_SKIPFILE        2
  1855. #define DPROMPT_BUFFERTOOSMALL  3
  1856. #define DPROMPT_OUTOFMEMORY     4
  1857.  
  1858.  
  1859. WINSETUPAPI
  1860. BOOL
  1861. WINAPI
  1862. SetupSetDirectoryIdA(
  1863.     IN HINF  InfHandle,
  1864.     IN DWORD Id,            OPTIONAL
  1865.     IN PCSTR Directory      OPTIONAL
  1866.     );
  1867.  
  1868. WINSETUPAPI
  1869. BOOL
  1870. WINAPI
  1871. SetupSetDirectoryIdW(
  1872.     IN HINF   InfHandle,
  1873.     IN DWORD  Id,           OPTIONAL
  1874.     IN PCWSTR Directory     OPTIONAL
  1875.     );
  1876.  
  1877. #ifdef UNICODE
  1878. #define SetupSetDirectoryId SetupSetDirectoryIdW
  1879. #else
  1880. #define SetupSetDirectoryId SetupSetDirectoryIdA
  1881. #endif
  1882.  
  1883.  
  1884. WINSETUPAPI
  1885. BOOL
  1886. WINAPI
  1887. SetupGetSourceInfoA(
  1888.     IN  HINF   InfHandle,
  1889.     IN  UINT   SourceId,
  1890.     IN  UINT   InfoDesired,
  1891.     OUT PSTR   ReturnBuffer,     OPTIONAL
  1892.     IN  DWORD  ReturnBufferSize,
  1893.     OUT PDWORD RequiredSize      OPTIONAL
  1894.     );
  1895.  
  1896. WINSETUPAPI
  1897. BOOL
  1898. WINAPI
  1899. SetupGetSourceInfoW(
  1900.     IN  HINF   InfHandle,
  1901.     IN  UINT   SourceId,
  1902.     IN  UINT   InfoDesired,
  1903.     OUT PWSTR  ReturnBuffer,     OPTIONAL
  1904.     IN  DWORD  ReturnBufferSize,
  1905.     OUT PDWORD RequiredSize      OPTIONAL
  1906.     );
  1907.  
  1908. #ifdef UNICODE
  1909. #define SetupGetSourceInfo SetupGetSourceInfoW
  1910. #else
  1911. #define SetupGetSourceInfo SetupGetSourceInfoA
  1912. #endif
  1913.  
  1914. //
  1915. // InfoDesired values for SetupGetSourceInfo
  1916. //
  1917. #define SRCINFO_PATH            1
  1918. #define SRCINFO_TAGFILE         2
  1919. #define SRCINFO_DESCRIPTION     3
  1920.  
  1921.  
  1922. WINSETUPAPI
  1923. BOOL
  1924. WINAPI
  1925. SetupInstallFileA(
  1926.     IN HINF                InfHandle,         OPTIONAL
  1927.     IN PINFCONTEXT         InfContext,        OPTIONAL
  1928.     IN PCSTR               SourceFile,        OPTIONAL
  1929.     IN PCSTR               SourcePathRoot,    OPTIONAL
  1930.     IN PCSTR               DestinationName,   OPTIONAL
  1931.     IN DWORD               CopyStyle,
  1932.     IN PSP_FILE_CALLBACK_A CopyMsgHandler,    OPTIONAL
  1933.     IN PVOID               Context            OPTIONAL
  1934.     );
  1935.  
  1936. WINSETUPAPI
  1937. BOOL
  1938. WINAPI
  1939. SetupInstallFileW(
  1940.     IN HINF                InfHandle,         OPTIONAL
  1941.     IN PINFCONTEXT         InfContext,        OPTIONAL
  1942.     IN PCWSTR              SourceFile,        OPTIONAL
  1943.     IN PCWSTR              SourcePathRoot,    OPTIONAL
  1944.     IN PCWSTR              DestinationName,   OPTIONAL
  1945.     IN DWORD               CopyStyle,
  1946.     IN PSP_FILE_CALLBACK_W CopyMsgHandler,    OPTIONAL
  1947.     IN PVOID               Context            OPTIONAL
  1948.     );
  1949.  
  1950. #ifdef UNICODE
  1951. #define SetupInstallFile SetupInstallFileW
  1952. #else
  1953. #define SetupInstallFile SetupInstallFileA
  1954. #endif
  1955.  
  1956. WINSETUPAPI
  1957. BOOL
  1958. WINAPI
  1959. SetupInstallFileExA(
  1960.     IN  HINF                InfHandle,         OPTIONAL
  1961.     IN  PINFCONTEXT         InfContext,        OPTIONAL
  1962.     IN  PCSTR               SourceFile,        OPTIONAL
  1963.     IN  PCSTR               SourcePathRoot,    OPTIONAL
  1964.     IN  PCSTR               DestinationName,   OPTIONAL
  1965.     IN  DWORD               CopyStyle,
  1966.     IN  PSP_FILE_CALLBACK_A CopyMsgHandler,    OPTIONAL
  1967.     IN  PVOID               Context,           OPTIONAL
  1968.     OUT PBOOL               FileWasInUse
  1969.     );
  1970.  
  1971. WINSETUPAPI
  1972. BOOL
  1973. WINAPI
  1974. SetupInstallFileExW(
  1975.     IN  HINF                InfHandle,         OPTIONAL
  1976.     IN  PINFCONTEXT         InfContext,        OPTIONAL
  1977.     IN  PCWSTR              SourceFile,        OPTIONAL
  1978.     IN  PCWSTR              SourcePathRoot,    OPTIONAL
  1979.     IN  PCWSTR              DestinationName,   OPTIONAL
  1980.     IN  DWORD               CopyStyle,
  1981.     IN  PSP_FILE_CALLBACK_W CopyMsgHandler,    OPTIONAL
  1982.     IN  PVOID               Context,           OPTIONAL
  1983.     OUT PBOOL               FileWasInUse
  1984.     );
  1985.  
  1986. #ifdef UNICODE
  1987. #define SetupInstallFileEx SetupInstallFileExW
  1988. #else
  1989. #define SetupInstallFileEx SetupInstallFileExA
  1990. #endif
  1991.  
  1992. //
  1993. // CopyStyle values for copy and queue-related APIs
  1994. //
  1995. #define SP_COPY_DELETESOURCE        0x0000001   // delete source file on successful copy
  1996. #define SP_COPY_REPLACEONLY         0x0000002   // copy only if target file already present
  1997. #define SP_COPY_NEWER               0x0000004   // copy only if source file newer than target
  1998. #define SP_COPY_NOOVERWRITE         0x0000008   // copy only if target doesn't exist
  1999. #define SP_COPY_NODECOMP            0x0000010   // don't decompress source file while copying
  2000. #define SP_COPY_LANGUAGEAWARE       0x0000020   // don't overwrite file of different language
  2001. #define SP_COPY_SOURCE_ABSOLUTE     0x0000040   // SourceFile is a full source path
  2002. #define SP_COPY_SOURCEPATH_ABSOLUTE 0x0000080   // SourcePathRoot is the full path
  2003. #define SP_COPY_IN_USE_NEEDS_REBOOT 0x0000100   // System needs reboot if file in use
  2004. #define SP_COPY_FORCE_IN_USE        0x0000200   // Force target-in-use behavior
  2005. #define SP_COPY_NOSKIP              0x0000400   // Skip is disallowed for this file or section
  2006. #define SP_FLAG_CABINETCONTINUATION 0x0000800   // Used with need media notification
  2007. #define SP_COPY_FORCE_NOOVERWRITE   0x0001000   // like NOOVERWRITE but no callback nofitication
  2008. #define SP_COPY_FORCE_NEWER         0x0002000   // like NEWER but no callback nofitication
  2009. #define SP_COPY_WARNIFSKIP          0x0004000   // system critical file: warn if user tries to skip
  2010. #define SP_COPY_NOBROWSE            0x0008000   // Browsing is disallowed for this file or section
  2011.  
  2012.  
  2013. WINSETUPAPI
  2014. HSPFILEQ
  2015. WINAPI
  2016. SetupOpenFileQueue(
  2017.     VOID
  2018.     );
  2019.  
  2020. WINSETUPAPI
  2021. BOOL
  2022. WINAPI
  2023. SetupCloseFileQueue(
  2024.     IN HSPFILEQ QueueHandle
  2025.     );
  2026.  
  2027.  
  2028. WINSETUPAPI
  2029. BOOL
  2030. WINAPI
  2031. SetupSetPlatformPathOverrideA(
  2032.     IN PCSTR Override   OPTIONAL
  2033.     );
  2034.  
  2035. WINSETUPAPI
  2036. BOOL
  2037. WINAPI
  2038. SetupSetPlatformPathOverrideW(
  2039.     IN PCWSTR Override  OPTIONAL
  2040.     );
  2041.  
  2042. #ifdef UNICODE
  2043. #define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW
  2044. #else
  2045. #define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA
  2046. #endif
  2047.  
  2048.  
  2049. WINSETUPAPI
  2050. BOOL
  2051. WINAPI
  2052. SetupQueueCopyA(
  2053.     IN HSPFILEQ QueueHandle,
  2054.     IN PCSTR    SourceRootPath,
  2055.     IN PCSTR    SourcePath,         OPTIONAL
  2056.     IN PCSTR    SourceFilename,
  2057.     IN PCSTR    SourceDescription,  OPTIONAL
  2058.     IN PCSTR    SourceTagfile,      OPTIONAL
  2059.     IN PCSTR    TargetDirectory,
  2060.     IN PCSTR    TargetFilename,     OPTIONAL
  2061.     IN DWORD    CopyStyle
  2062.     );
  2063.  
  2064. WINSETUPAPI
  2065. BOOL
  2066. WINAPI
  2067. SetupQueueCopyW(
  2068.     IN HSPFILEQ QueueHandle,
  2069.     IN PCWSTR   SourceRootPath,
  2070.     IN PCWSTR   SourcePath,         OPTIONAL
  2071.     IN PCWSTR   SourceFilename,
  2072.     IN PCWSTR   SourceDescription,  OPTIONAL
  2073.     IN PCWSTR   SourceTagfile,      OPTIONAL
  2074.     IN PCWSTR   TargetDirectory,
  2075.     IN PCWSTR   TargetFilename,     OPTIONAL
  2076.     IN DWORD    CopyStyle
  2077.     );
  2078.  
  2079. #ifdef UNICODE
  2080. #define SetupQueueCopy SetupQueueCopyW
  2081. #else
  2082. #define SetupQueueCopy SetupQueueCopyA
  2083. #endif
  2084.  
  2085.  
  2086. WINSETUPAPI
  2087. BOOL
  2088. WINAPI
  2089. SetupQueueDefaultCopyA(
  2090.     IN HSPFILEQ QueueHandle,
  2091.     IN HINF     InfHandle,
  2092.     IN PCSTR    SourceRootPath,
  2093.     IN PCSTR    SourceFilename,
  2094.     IN PCSTR    TargetFilename,
  2095.     IN DWORD    CopyStyle
  2096.     );
  2097.  
  2098. WINSETUPAPI
  2099. BOOL
  2100. WINAPI
  2101. SetupQueueDefaultCopyW(
  2102.     IN HSPFILEQ QueueHandle,
  2103.     IN HINF     InfHandle,
  2104.     IN PCWSTR   SourceRootPath,
  2105.     IN PCWSTR   SourceFilename,
  2106.     IN PCWSTR   TargetFilename,
  2107.     IN DWORD    CopyStyle
  2108.     );
  2109.  
  2110. #ifdef UNICODE
  2111. #define SetupQueueDefaultCopy SetupQueueDefaultCopyW
  2112. #else
  2113. #define SetupQueueDefaultCopy SetupQueueDefaultCopyA
  2114. #endif
  2115.  
  2116.  
  2117. WINSETUPAPI
  2118. BOOL
  2119. WINAPI
  2120. SetupQueueCopySectionA(
  2121.     IN HSPFILEQ QueueHandle,
  2122.     IN PCSTR    SourceRootPath,
  2123.     IN HINF     InfHandle,
  2124.     IN HINF     ListInfHandle,   OPTIONAL
  2125.     IN PCSTR    Section,
  2126.     IN DWORD    CopyStyle
  2127.     );
  2128.  
  2129. WINSETUPAPI
  2130. BOOL
  2131. WINAPI
  2132. SetupQueueCopySectionW(
  2133.     IN HSPFILEQ QueueHandle,
  2134.     IN PCWSTR   SourceRootPath,
  2135.     IN HINF     InfHandle,
  2136.     IN HINF     ListInfHandle,   OPTIONAL
  2137.     IN PCWSTR   Section,
  2138.     IN DWORD    CopyStyle
  2139.     );
  2140.  
  2141. #ifdef UNICODE
  2142. #define SetupQueueCopySection SetupQueueCopySectionW
  2143. #else
  2144. #define SetupQueueCopySection SetupQueueCopySectionA
  2145. #endif
  2146.  
  2147.  
  2148. WINSETUPAPI
  2149. BOOL
  2150. WINAPI
  2151. SetupQueueDeleteA(
  2152.     IN HSPFILEQ QueueHandle,
  2153.     IN PCSTR    PathPart1,
  2154.     IN PCSTR    PathPart2       OPTIONAL
  2155.     );
  2156.  
  2157. WINSETUPAPI
  2158. BOOL
  2159. WINAPI
  2160. SetupQueueDeleteW(
  2161.     IN HSPFILEQ QueueHandle,
  2162.     IN PCWSTR   PathPart1,
  2163.     IN PCWSTR   PathPart2       OPTIONAL
  2164.     );
  2165.  
  2166. #ifdef UNICODE
  2167. #define SetupQueueDelete SetupQueueDeleteW
  2168. #else
  2169. #define SetupQueueDelete SetupQueueDeleteA
  2170. #endif
  2171.  
  2172.  
  2173. WINSETUPAPI
  2174. BOOL
  2175. WINAPI
  2176. SetupQueueDeleteSectionA(
  2177.     IN HSPFILEQ QueueHandle,
  2178.     IN HINF     InfHandle,
  2179.     IN HINF     ListInfHandle,   OPTIONAL
  2180.     IN PCSTR    Section
  2181.     );
  2182.  
  2183. WINSETUPAPI
  2184. BOOL
  2185. WINAPI
  2186. SetupQueueDeleteSectionW(
  2187.     IN HSPFILEQ QueueHandle,
  2188.     IN HINF     InfHandle,
  2189.     IN HINF     ListInfHandle,   OPTIONAL
  2190.     IN PCWSTR   Section
  2191.     );
  2192.  
  2193. #ifdef UNICODE
  2194. #define SetupQueueDeleteSection SetupQueueDeleteSectionW
  2195. #else
  2196. #define SetupQueueDeleteSection SetupQueueDeleteSectionA
  2197. #endif
  2198.  
  2199.  
  2200. WINSETUPAPI
  2201. BOOL
  2202. WINAPI
  2203. SetupQueueRenameA(
  2204.     IN HSPFILEQ QueueHandle,
  2205.     IN PCSTR    SourcePath,
  2206.     IN PCSTR    SourceFilename, OPTIONAL
  2207.     IN PCSTR    TargetPath,     OPTIONAL
  2208.     IN PCSTR    TargetFilename
  2209.     );
  2210.  
  2211. WINSETUPAPI
  2212. BOOL
  2213. WINAPI
  2214. SetupQueueRenameW(
  2215.     IN HSPFILEQ QueueHandle,
  2216.     IN PCWSTR   SourcePath,
  2217.     IN PCWSTR   SourceFilename, OPTIONAL
  2218.     IN PCWSTR   TargetPath,     OPTIONAL
  2219.     IN PCWSTR   TargetFilename
  2220.     );
  2221.  
  2222. #ifdef UNICODE
  2223. #define SetupQueueRename SetupQueueRenameW
  2224. #else
  2225. #define SetupQueueRename SetupQueueRenameA
  2226. #endif
  2227.  
  2228.  
  2229. WINSETUPAPI
  2230. BOOL
  2231. WINAPI
  2232. SetupQueueRenameSectionA(
  2233.     IN HSPFILEQ QueueHandle,
  2234.     IN HINF     InfHandle,
  2235.     IN HINF     ListInfHandle,   OPTIONAL
  2236.     IN PCSTR    Section
  2237.     );
  2238.  
  2239. WINSETUPAPI
  2240. BOOL
  2241. WINAPI
  2242. SetupQueueRenameSectionW(
  2243.     IN HSPFILEQ QueueHandle,
  2244.     IN HINF     InfHandle,
  2245.     IN HINF     ListInfHandle,   OPTIONAL
  2246.     IN PCWSTR   Section
  2247.     );
  2248.  
  2249. #ifdef UNICODE
  2250. #define SetupQueueRenameSection SetupQueueRenameSectionW
  2251. #else
  2252. #define SetupQueueRenameSection SetupQueueRenameSectionA
  2253. #endif
  2254.  
  2255.  
  2256. WINSETUPAPI
  2257. BOOL
  2258. WINAPI
  2259. SetupCommitFileQueueA(
  2260.     IN HWND                Owner,         OPTIONAL
  2261.     IN HSPFILEQ            QueueHandle,
  2262.     IN PSP_FILE_CALLBACK_A MsgHandler,
  2263.     IN PVOID               Context
  2264.     );
  2265.  
  2266. WINSETUPAPI
  2267. BOOL
  2268. WINAPI
  2269. SetupCommitFileQueueW(
  2270.     IN HWND                Owner,         OPTIONAL
  2271.     IN HSPFILEQ            QueueHandle,
  2272.     IN PSP_FILE_CALLBACK_W MsgHandler,
  2273.     IN PVOID               Context
  2274.     );
  2275.  
  2276. #ifdef UNICODE
  2277. #define SetupCommitFileQueue SetupCommitFileQueueW
  2278. #else
  2279. #define SetupCommitFileQueue SetupCommitFileQueueA
  2280. #endif
  2281.  
  2282.  
  2283. WINSETUPAPI
  2284. BOOL
  2285. WINAPI
  2286. SetupScanFileQueueA(
  2287.     IN  HSPFILEQ            FileQueue,
  2288.     IN  DWORD               Flags,
  2289.     IN  HWND                Window,            OPTIONAL
  2290.     IN  PSP_FILE_CALLBACK_A CallbackRoutine,   OPTIONAL
  2291.     IN  PVOID               CallbackContext,   OPTIONAL
  2292.     OUT PDWORD              Result
  2293.     );
  2294.  
  2295. WINSETUPAPI
  2296. BOOL
  2297. WINAPI
  2298. SetupScanFileQueueW(
  2299.     IN  HSPFILEQ            FileQueue,
  2300.     IN  DWORD               Flags,
  2301.     IN  HWND                Window,            OPTIONAL
  2302.     IN  PSP_FILE_CALLBACK_W CallbackRoutine,   OPTIONAL
  2303.     IN  PVOID               CallbackContext,   OPTIONAL
  2304.     OUT PDWORD              Result
  2305.     );
  2306.  
  2307. #ifdef UNICODE
  2308. #define SetupScanFileQueue SetupScanFileQueueW
  2309. #else
  2310. #define SetupScanFileQueue SetupScanFileQueueA
  2311. #endif
  2312.  
  2313. //
  2314. // Define flags for SetupScanFileQueue.
  2315. //
  2316. #define SPQ_SCAN_FILE_PRESENCE  0x00000001
  2317. #define SPQ_SCAN_FILE_VALIDITY  0x00000002
  2318. #define SPQ_SCAN_USE_CALLBACK   0x00000004
  2319. #define SPQ_SCAN_INFORM_USER    0x00000010
  2320.  
  2321. //
  2322. // Define flags used with Param2 for SPFILENOTIFY_QUEUESCAN
  2323. //
  2324. #define SPQ_DELAYED_COPY        0x00000001  // file was in use; registered for delayed copy
  2325.  
  2326. //
  2327. // Cabinet APIs
  2328. //
  2329.  
  2330. WINSETUPAPI
  2331. BOOL
  2332. WINAPI
  2333. SetupIterateCabinetA(
  2334.     IN  PCSTR               CabinetFile,
  2335.     IN  DWORD               Reserved,
  2336.     IN  PSP_FILE_CALLBACK_A MsgHandler,
  2337.     IN  PVOID               Context
  2338.     );
  2339.  
  2340. WINSETUPAPI
  2341. BOOL
  2342. WINAPI
  2343. SetupIterateCabinetW(
  2344.     IN  PCWSTR              CabinetFile,
  2345.     IN  DWORD               Reserved,
  2346.     IN  PSP_FILE_CALLBACK_W MsgHandler,
  2347.     IN  PVOID               Context
  2348.     );
  2349.  
  2350. #ifdef UNICODE
  2351. #define SetupIterateCabinet SetupIterateCabinetW
  2352. #else
  2353. #define SetupIterateCabinet SetupIterateCabinetA
  2354. #endif
  2355.  
  2356.  
  2357. WINSETUPAPI
  2358. INT
  2359. WINAPI
  2360. SetupPromptReboot(
  2361.     IN HSPFILEQ FileQueue,  OPTIONAL
  2362.     IN HWND     Owner,
  2363.     IN BOOL     ScanOnly
  2364.     );
  2365.  
  2366. //
  2367. // Define flags that are returned by SetupPromptReboot
  2368. //
  2369. #define SPFILEQ_FILE_IN_USE         0x00000001
  2370. #define SPFILEQ_REBOOT_RECOMMENDED  0x00000002
  2371. #define SPFILEQ_REBOOT_IN_PROGRESS  0x00000004
  2372.  
  2373.  
  2374. WINSETUPAPI
  2375. PVOID
  2376. WINAPI
  2377. SetupInitDefaultQueueCallback(
  2378.     IN HWND OwnerWindow
  2379.     );
  2380.  
  2381. WINSETUPAPI
  2382. PVOID
  2383. WINAPI
  2384. SetupInitDefaultQueueCallbackEx(
  2385.     IN HWND  OwnerWindow,
  2386.     IN HWND  AlternateProgressWindow, OPTIONAL
  2387.     IN UINT  ProgressMessage,
  2388.     IN DWORD Reserved1,
  2389.     IN PVOID Reserved2
  2390.     );
  2391.  
  2392. WINSETUPAPI
  2393. VOID
  2394. WINAPI
  2395. SetupTermDefaultQueueCallback(
  2396.     IN PVOID Context
  2397.     );
  2398.  
  2399. WINSETUPAPI
  2400. UINT
  2401. WINAPI
  2402. SetupDefaultQueueCallbackA(
  2403.     IN PVOID Context,
  2404.     IN UINT  Notification,
  2405.     IN UINT  Param1,
  2406.     IN UINT  Param2
  2407.     );
  2408.  
  2409. WINSETUPAPI
  2410. UINT
  2411. WINAPI
  2412. SetupDefaultQueueCallbackW(
  2413.     IN PVOID Context,
  2414.     IN UINT  Notification,
  2415.     IN UINT  Param1,
  2416.     IN UINT  Param2
  2417.     );
  2418.  
  2419. #ifdef UNICODE
  2420. #define SetupDefaultQueueCallback SetupDefaultQueueCallbackW
  2421. #else
  2422. #define SetupDefaultQueueCallback SetupDefaultQueueCallbackA
  2423. #endif
  2424.  
  2425.  
  2426. //
  2427. // Flags for AddReg section lines in INF.  The corresponding value
  2428. // is <ValueType> in the AddReg line format given below:
  2429. //
  2430. // <RegRootString>,<SubKey>,<ValueName>,<ValueType>,<Value>...
  2431. //
  2432. // The low word contains basic flags concerning the general data type
  2433. // and AddReg action. The high word contains values that more specifically
  2434. // identify the data type of the registry value.  The high word is ignored
  2435. // by the 16-bit Windows 95 SETUPX APIs.
  2436. //
  2437. #define FLG_ADDREG_BINVALUETYPE     ( 0x00000001 )
  2438. #define FLG_ADDREG_NOCLOBBER        ( 0x00000002 )
  2439. #define FLG_ADDREG_DELVAL           ( 0x00000004 )
  2440. #define FLG_ADDREG_APPEND           ( 0x00000008 ) // Currently supported only
  2441.                                                    // for REG_MULTI_SZ values.
  2442.  
  2443. #define FLG_ADDREG_TYPE_MASK        ( 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE )
  2444. #define FLG_ADDREG_TYPE_SZ          ( 0x00000000                           )
  2445. #define FLG_ADDREG_TYPE_MULTI_SZ    ( 0x00010000                           )
  2446. #define FLG_ADDREG_TYPE_EXPAND_SZ   ( 0x00020000                           )
  2447. #define FLG_ADDREG_TYPE_BINARY      ( 0x00000000 | FLG_ADDREG_BINVALUETYPE )
  2448. #define FLG_ADDREG_TYPE_DWORD       ( 0x00010000 | FLG_ADDREG_BINVALUETYPE )
  2449. #define FLG_ADDREG_TYPE_NONE        ( 0x00020000 | FLG_ADDREG_BINVALUETYPE )
  2450.  
  2451. //
  2452. // The INF may supply any arbitrary data type ordinal in the highword except
  2453. // for the following: REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ.  If this
  2454. // technique is used, then the data is given in binary format, one byte per
  2455. // field.
  2456. //
  2457.  
  2458.  
  2459. WINSETUPAPI
  2460. BOOL
  2461. WINAPI
  2462. SetupInstallFromInfSectionA(
  2463.     IN HWND                Owner,
  2464.     IN HINF                InfHandle,
  2465.     IN PCSTR               SectionName,
  2466.     IN UINT                Flags,
  2467.     IN HKEY                RelativeKeyRoot,   OPTIONAL
  2468.     IN PCSTR               SourceRootPath,    OPTIONAL
  2469.     IN UINT                CopyFlags,
  2470.     IN PSP_FILE_CALLBACK_A MsgHandler,
  2471.     IN PVOID               Context,
  2472.     IN HDEVINFO            DeviceInfoSet,     OPTIONAL
  2473.     IN PSP_DEVINFO_DATA    DeviceInfoData     OPTIONAL
  2474.     );
  2475.  
  2476. WINSETUPAPI
  2477. BOOL
  2478. WINAPI
  2479. SetupInstallFromInfSectionW(
  2480.     IN HWND                Owner,
  2481.     IN HINF                InfHandle,
  2482.     IN PCWSTR              SectionName,
  2483.     IN UINT                Flags,
  2484.     IN HKEY                RelativeKeyRoot,   OPTIONAL
  2485.     IN PCWSTR              SourceRootPath,    OPTIONAL
  2486.     IN UINT                CopyFlags,
  2487.     IN PSP_FILE_CALLBACK_W MsgHandler,
  2488.     IN PVOID               Context,
  2489.     IN HDEVINFO            DeviceInfoSet,     OPTIONAL
  2490.     IN PSP_DEVINFO_DATA    DeviceInfoData     OPTIONAL
  2491.     );
  2492.  
  2493. #ifdef UNICODE
  2494. #define SetupInstallFromInfSection SetupInstallFromInfSectionW
  2495. #else
  2496. #define SetupInstallFromInfSection SetupInstallFromInfSectionA
  2497. #endif
  2498.  
  2499. //
  2500. // Flags for SetupInstallFromInfSection
  2501. //
  2502. #define SPINST_LOGCONFIG        0x00000001
  2503. #define SPINST_INIFILES         0x00000002
  2504. #define SPINST_REGISTRY         0x00000004
  2505. #define SPINST_INI2REG          0x00000008
  2506. #define SPINST_FILES            0x00000010
  2507. #define SPINST_ALL              0x0000001f
  2508.  
  2509.  
  2510. WINSETUPAPI
  2511. BOOL
  2512. WINAPI
  2513. SetupInstallFilesFromInfSectionA(
  2514.     IN HINF     InfHandle,
  2515.     IN HINF     LayoutInfHandle,    OPTIONAL
  2516.     IN HSPFILEQ FileQueue,
  2517.     IN PCSTR    SectionName,
  2518.     IN PCSTR    SourceRootPath,     OPTIONAL
  2519.     IN UINT     CopyFlags
  2520.     );
  2521.  
  2522. WINSETUPAPI
  2523. BOOL
  2524. WINAPI
  2525. SetupInstallFilesFromInfSectionW(
  2526.     IN HINF     InfHandle,
  2527.     IN HINF     LayoutInfHandle,    OPTIONAL
  2528.     IN HSPFILEQ FileQueue,
  2529.     IN PCWSTR   SectionName,
  2530.     IN PCWSTR   SourceRootPath,     OPTIONAL
  2531.     IN UINT     CopyFlags
  2532.     );
  2533.  
  2534. #ifdef UNICODE
  2535. #define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionW
  2536. #else
  2537. #define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionA
  2538. #endif
  2539.  
  2540.  
  2541. WINSETUPAPI
  2542. BOOL
  2543. WINAPI
  2544. SetupInstallServicesFromInfSectionA(
  2545.     IN HINF   InfHandle,
  2546.     IN PCSTR  SectionName,
  2547.     IN DWORD  Flags
  2548.     );
  2549.  
  2550. WINSETUPAPI
  2551. BOOL
  2552. WINAPI
  2553. SetupInstallServicesFromInfSectionW(
  2554.     IN HINF   InfHandle,
  2555.     IN PCWSTR SectionName,
  2556.     IN DWORD  Flags
  2557.     );
  2558.  
  2559. #ifdef UNICODE
  2560. #define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionW
  2561. #else
  2562. #define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionA
  2563. #endif
  2564.  
  2565. //
  2566. // Flags for SetupInstallServicesFromInfSection.  These flags are also used in
  2567. // the flags field of an AddService line in a device INF.  However, in that case,
  2568. // additional flags are permitted that are not used by this API.  These flags
  2569. // are marked as such below.
  2570. //
  2571. #define SPSVCINST_TAGTOFRONT    (0x00000001)  // move service's tag to front of its group order list
  2572. #define SPSVCINST_ASSOCSERVICE  (0x00000002)  // associate this service with the device being installed
  2573.                                               // (flag is ignored by SetupInstallServicesFromInfSection)
  2574.  
  2575. //
  2576. // Define handle type for Setup file log.
  2577. //
  2578. typedef PVOID HSPFILELOG;
  2579.  
  2580. WINSETUPAPI
  2581. HSPFILELOG
  2582. WINAPI
  2583. SetupInitializeFileLogA(
  2584.     IN PCSTR LogFileName,   OPTIONAL
  2585.     IN DWORD Flags
  2586.     );
  2587.  
  2588. WINSETUPAPI
  2589. HSPFILELOG
  2590. WINAPI
  2591. SetupInitializeFileLogW(
  2592.     IN PCWSTR LogFileName,  OPTIONAL
  2593.     IN DWORD  Flags
  2594.     );
  2595.  
  2596. #ifdef UNICODE
  2597. #define SetupInitializeFileLog SetupInitializeFileLogW
  2598. #else
  2599. #define SetupInitializeFileLog SetupInitializeFileLogA
  2600. #endif
  2601.  
  2602. //
  2603. // Flags for SetupInitializeFileLog
  2604. //
  2605. #define SPFILELOG_SYSTEMLOG     0x00000001  // use system log -- must be Administrator
  2606. #define SPFILELOG_FORCENEW      0x00000002  // not valid with SPFILELOG_SYSTEMLOG
  2607. #define SPFILELOG_QUERYONLY     0x00000004  // allows non-administrators to read system log
  2608.  
  2609.  
  2610. WINSETUPAPI
  2611. BOOL
  2612. WINAPI
  2613. SetupTerminateFileLog(
  2614.     IN HSPFILELOG FileLogHandle
  2615.     );
  2616.  
  2617.  
  2618. WINSETUPAPI
  2619. BOOL
  2620. WINAPI
  2621. SetupLogFileA(
  2622.     IN HSPFILELOG FileLogHandle,
  2623.     IN PCSTR      LogSectionName,   OPTIONAL
  2624.     IN PCSTR      SourceFilename,
  2625.     IN PCSTR      TargetFilename,
  2626.     IN DWORD      Checksum,         OPTIONAL
  2627.     IN PCSTR      DiskTagfile,      OPTIONAL
  2628.     IN PCSTR      DiskDescription,  OPTIONAL
  2629.     IN PCSTR      OtherInfo,        OPTIONAL
  2630.     IN DWORD      Flags
  2631.     );
  2632.  
  2633. WINSETUPAPI
  2634. BOOL
  2635. WINAPI
  2636. SetupLogFileW(
  2637.     IN HSPFILELOG FileLogHandle,
  2638.     IN PCWSTR     LogSectionName,   OPTIONAL
  2639.     IN PCWSTR     SourceFilename,
  2640.     IN PCWSTR     TargetFilename,
  2641.     IN DWORD      Checksum,         OPTIONAL
  2642.     IN PCWSTR     DiskTagfile,      OPTIONAL
  2643.     IN PCWSTR     DiskDescription,  OPTIONAL
  2644.     IN PCWSTR     OtherInfo,        OPTIONAL
  2645.     IN DWORD      Flags
  2646.     );
  2647.  
  2648. #ifdef UNICODE
  2649. #define SetupLogFile SetupLogFileW
  2650. #else
  2651. #define SetupLogFile SetupLogFileA
  2652. #endif
  2653.  
  2654. //
  2655. // Flags for SetupLogFile
  2656. //
  2657. #define SPFILELOG_OEMFILE   0x00000001
  2658.  
  2659.  
  2660. WINSETUPAPI
  2661. BOOL
  2662. WINAPI
  2663. SetupRemoveFileLogEntryA(
  2664.     IN HSPFILELOG FileLogHandle,
  2665.     IN PCSTR      LogSectionName,   OPTIONAL
  2666.     IN PCSTR      TargetFilename    OPTIONAL
  2667.     );
  2668.  
  2669. WINSETUPAPI
  2670. BOOL
  2671. WINAPI
  2672. SetupRemoveFileLogEntryW(
  2673.     IN HSPFILELOG FileLogHandle,
  2674.     IN PCWSTR     LogSectionName,   OPTIONAL
  2675.     IN PCWSTR     TargetFilename    OPTIONAL
  2676.     );
  2677.  
  2678. #ifdef UNICODE
  2679. #define SetupRemoveFileLogEntry SetupRemoveFileLogEntryW
  2680. #else
  2681. #define SetupRemoveFileLogEntry SetupRemoveFileLogEntryA
  2682. #endif
  2683.  
  2684.  
  2685. //
  2686. // Items retrievable from SetupQueryFileLog()
  2687. //
  2688. typedef enum {
  2689.     SetupFileLogSourceFilename,
  2690.     SetupFileLogChecksum,
  2691.     SetupFileLogDiskTagfile,
  2692.     SetupFileLogDiskDescription,
  2693.     SetupFileLogOtherInfo,
  2694.     SetupFileLogMax
  2695. } SetupFileLogInfo;
  2696.  
  2697. WINSETUPAPI
  2698. BOOL
  2699. WINAPI
  2700. SetupQueryFileLogA(
  2701.     IN  HSPFILELOG       FileLogHandle,
  2702.     IN  PCSTR            LogSectionName,   OPTIONAL
  2703.     IN  PCSTR            TargetFilename,
  2704.     IN  SetupFileLogInfo DesiredInfo,
  2705.     OUT PSTR             DataOut,          OPTIONAL
  2706.     IN  DWORD            ReturnBufferSize,
  2707.     OUT PDWORD           RequiredSize      OPTIONAL
  2708.     );
  2709.  
  2710. WINSETUPAPI
  2711. BOOL
  2712. WINAPI
  2713. SetupQueryFileLogW(
  2714.     IN  HSPFILELOG       FileLogHandle,
  2715.     IN  PCWSTR           LogSectionName,   OPTIONAL
  2716.     IN  PCWSTR           TargetFilename,
  2717.     IN  SetupFileLogInfo DesiredInfo,
  2718.     OUT PWSTR            DataOut,          OPTIONAL
  2719.     IN  DWORD            ReturnBufferSize,
  2720.     OUT PDWORD           RequiredSize      OPTIONAL
  2721.     );
  2722.  
  2723. #ifdef UNICODE
  2724. #define SetupQueryFileLog SetupQueryFileLogW
  2725. #else
  2726. #define SetupQueryFileLog SetupQueryFileLogA
  2727. #endif
  2728.  
  2729.  
  2730. //
  2731. // Device Installer APIs
  2732. //
  2733.  
  2734. WINSETUPAPI
  2735. HDEVINFO
  2736. WINAPI
  2737. SetupDiCreateDeviceInfoList(
  2738.     IN LPGUID ClassGuid, OPTIONAL
  2739.     IN HWND   hwndParent OPTIONAL
  2740.     );
  2741.  
  2742.  
  2743. WINSETUPAPI
  2744. BOOL
  2745. WINAPI
  2746. SetupDiGetDeviceInfoListClass(
  2747.     IN  HDEVINFO DeviceInfoSet,
  2748.     OUT LPGUID   ClassGuid
  2749.     );
  2750.  
  2751.  
  2752. //
  2753. // Flags for SetupDiCreateDeviceInfo
  2754. //
  2755. #define DICD_GENERATE_ID        0x00000001
  2756. #define DICD_INHERIT_CLASSDRVS  0x00000002
  2757.  
  2758. WINSETUPAPI
  2759. BOOL
  2760. WINAPI
  2761. SetupDiCreateDeviceInfoA(
  2762.     IN  HDEVINFO         DeviceInfoSet,
  2763.     IN  PCSTR            DeviceName,
  2764.     IN  LPGUID           ClassGuid,
  2765.     IN  PCSTR            DeviceDescription, OPTIONAL
  2766.     IN  HWND             hwndParent,        OPTIONAL
  2767.     IN  DWORD            CreationFlags,
  2768.     OUT PSP_DEVINFO_DATA DeviceInfoData     OPTIONAL
  2769.     );
  2770.  
  2771. WINSETUPAPI
  2772. BOOL
  2773. WINAPI
  2774. SetupDiCreateDeviceInfoW(
  2775.     IN  HDEVINFO         DeviceInfoSet,
  2776.     IN  PCWSTR           DeviceName,
  2777.     IN  LPGUID           ClassGuid,
  2778.     IN  PCWSTR           DeviceDescription, OPTIONAL
  2779.     IN  HWND             hwndParent,        OPTIONAL
  2780.     IN  DWORD            CreationFlags,
  2781.     OUT PSP_DEVINFO_DATA DeviceInfoData     OPTIONAL
  2782.     );
  2783.  
  2784. #ifdef UNICODE
  2785. #define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoW
  2786. #else
  2787. #define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoA
  2788. #endif
  2789.  
  2790.  
  2791. //
  2792. // Flags for SetupDiOpenDeviceInfo
  2793. //
  2794. #define DIOD_INHERIT_CLASSDRVS  0x00000002
  2795. #define DIOD_CANCEL_REMOVE      0x00000004
  2796.  
  2797. WINSETUPAPI
  2798. BOOL
  2799. WINAPI
  2800. SetupDiOpenDeviceInfoA(
  2801.     IN  HDEVINFO         DeviceInfoSet,
  2802.     IN  PCSTR            DeviceInstanceId,
  2803.     IN  HWND             hwndParent,       OPTIONAL
  2804.     IN  DWORD            OpenFlags,
  2805.     OUT PSP_DEVINFO_DATA DeviceInfoData    OPTIONAL
  2806.     );
  2807.  
  2808. WINSETUPAPI
  2809. BOOL
  2810. WINAPI
  2811. SetupDiOpenDeviceInfoW(
  2812.     IN  HDEVINFO         DeviceInfoSet,
  2813.     IN  PCWSTR           DeviceInstanceId,
  2814.     IN  HWND             hwndParent,       OPTIONAL
  2815.     IN  DWORD            OpenFlags,
  2816.     OUT PSP_DEVINFO_DATA DeviceInfoData    OPTIONAL
  2817.     );
  2818.  
  2819. #ifdef UNICODE
  2820. #define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoW
  2821. #else
  2822. #define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoA
  2823. #endif
  2824.  
  2825.  
  2826. WINSETUPAPI
  2827. BOOL
  2828. WINAPI
  2829. SetupDiGetDeviceInstanceIdA(
  2830.     IN  HDEVINFO         DeviceInfoSet,
  2831.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  2832.     OUT PSTR             DeviceInstanceId,
  2833.     IN  DWORD            DeviceInstanceIdSize,
  2834.     OUT PDWORD           RequiredSize          OPTIONAL
  2835.     );
  2836.  
  2837. WINSETUPAPI
  2838. BOOL
  2839. WINAPI
  2840. SetupDiGetDeviceInstanceIdW(
  2841.     IN  HDEVINFO         DeviceInfoSet,
  2842.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  2843.     OUT PWSTR            DeviceInstanceId,
  2844.     IN  DWORD            DeviceInstanceIdSize,
  2845.     OUT PDWORD           RequiredSize          OPTIONAL
  2846.     );
  2847.  
  2848. #ifdef UNICODE
  2849. #define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdW
  2850. #else
  2851. #define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdA
  2852. #endif
  2853.  
  2854.  
  2855. WINSETUPAPI
  2856. BOOL
  2857. WINAPI
  2858. SetupDiDeleteDeviceInfo(
  2859.     IN HDEVINFO         DeviceInfoSet,
  2860.     IN PSP_DEVINFO_DATA DeviceInfoData
  2861.     );
  2862.  
  2863.  
  2864. WINSETUPAPI
  2865. BOOL
  2866. WINAPI
  2867. SetupDiEnumDeviceInfo(
  2868.     IN  HDEVINFO         DeviceInfoSet,
  2869.     IN  DWORD            MemberIndex,
  2870.     OUT PSP_DEVINFO_DATA DeviceInfoData
  2871.     );
  2872.  
  2873.  
  2874. WINSETUPAPI
  2875. BOOL
  2876. WINAPI
  2877. SetupDiDestroyDeviceInfoList(
  2878.     IN HDEVINFO DeviceInfoSet
  2879.     );
  2880.  
  2881.  
  2882. //
  2883. // Flags for SetupDiRegisterDeviceInfo
  2884. //
  2885. #define SPRDI_FIND_DUPS        0x00000001
  2886.  
  2887. WINSETUPAPI
  2888. BOOL
  2889. WINAPI
  2890. SetupDiRegisterDeviceInfo(
  2891.     IN     HDEVINFO           DeviceInfoSet,
  2892.     IN OUT PSP_DEVINFO_DATA   DeviceInfoData,
  2893.     IN     DWORD              Flags,
  2894.     IN     PSP_DETSIG_CMPPROC CompareProc,      OPTIONAL
  2895.     IN     PVOID              CompareContext,   OPTIONAL
  2896.     OUT    PSP_DEVINFO_DATA   DupDeviceInfoData OPTIONAL
  2897.     );
  2898.  
  2899.  
  2900. //
  2901. // Ordinal values distinguishing between class drivers and
  2902. // device drivers.
  2903. // (Passed in 'DriverType' parameter of driver information list APIs)
  2904. //
  2905. #define SPDIT_NODRIVER           0x00000000
  2906. #define SPDIT_CLASSDRIVER        0x00000001
  2907. #define SPDIT_COMPATDRIVER       0x00000002
  2908.  
  2909. WINSETUPAPI
  2910. BOOL
  2911. WINAPI
  2912. SetupDiBuildDriverInfoList(
  2913.     IN     HDEVINFO         DeviceInfoSet,
  2914.     IN OUT PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
  2915.     IN     DWORD            DriverType
  2916.     );
  2917.  
  2918.  
  2919. WINSETUPAPI
  2920. BOOL
  2921. WINAPI
  2922. SetupDiCancelDriverInfoSearch(
  2923.     IN HDEVINFO DeviceInfoSet
  2924.     );
  2925.  
  2926.  
  2927. WINSETUPAPI
  2928. BOOL
  2929. WINAPI
  2930. SetupDiEnumDriverInfoA(
  2931.     IN  HDEVINFO           DeviceInfoSet,
  2932.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2933.     IN  DWORD              DriverType,
  2934.     IN  DWORD              MemberIndex,
  2935.     OUT PSP_DRVINFO_DATA_A DriverInfoData
  2936.     );
  2937.  
  2938. WINSETUPAPI
  2939. BOOL
  2940. WINAPI
  2941. SetupDiEnumDriverInfoW(
  2942.     IN  HDEVINFO           DeviceInfoSet,
  2943.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2944.     IN  DWORD              DriverType,
  2945.     IN  DWORD              MemberIndex,
  2946.     OUT PSP_DRVINFO_DATA_W DriverInfoData
  2947.     );
  2948.  
  2949. #ifdef UNICODE
  2950. #define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW
  2951. #else
  2952. #define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA
  2953. #endif
  2954.  
  2955.  
  2956. WINSETUPAPI
  2957. BOOL
  2958. WINAPI
  2959. SetupDiGetSelectedDriverA(
  2960.     IN  HDEVINFO           DeviceInfoSet,
  2961.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2962.     OUT PSP_DRVINFO_DATA_A DriverInfoData
  2963.     );
  2964.  
  2965. WINSETUPAPI
  2966. BOOL
  2967. WINAPI
  2968. SetupDiGetSelectedDriverW(
  2969.     IN  HDEVINFO           DeviceInfoSet,
  2970.     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2971.     OUT PSP_DRVINFO_DATA_W DriverInfoData
  2972.     );
  2973.  
  2974. #ifdef UNICODE
  2975. #define SetupDiGetSelectedDriver SetupDiGetSelectedDriverW
  2976. #else
  2977. #define SetupDiGetSelectedDriver SetupDiGetSelectedDriverA
  2978. #endif
  2979.  
  2980.  
  2981. WINSETUPAPI
  2982. BOOL
  2983. WINAPI
  2984. SetupDiSetSelectedDriverA(
  2985.     IN     HDEVINFO           DeviceInfoSet,
  2986.     IN     PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2987.     IN OUT PSP_DRVINFO_DATA_A DriverInfoData  OPTIONAL
  2988.     );
  2989.  
  2990. WINSETUPAPI
  2991. BOOL
  2992. WINAPI
  2993. SetupDiSetSelectedDriverW(
  2994.     IN     HDEVINFO           DeviceInfoSet,
  2995.     IN     PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
  2996.     IN OUT PSP_DRVINFO_DATA_W DriverInfoData  OPTIONAL
  2997.     );
  2998.  
  2999. #ifdef UNICODE
  3000. #define SetupDiSetSelectedDriver SetupDiSetSelectedDriverW
  3001. #else
  3002. #define SetupDiSetSelectedDriver SetupDiSetSelectedDriverA
  3003. #endif
  3004.  
  3005.  
  3006. WINSETUPAPI
  3007. BOOL
  3008. WINAPI
  3009. SetupDiGetDriverInfoDetailA(
  3010.     IN  HDEVINFO                  DeviceInfoSet,
  3011.     IN  PSP_DEVINFO_DATA          DeviceInfoData,           OPTIONAL
  3012.     IN  PSP_DRVINFO_DATA_A        DriverInfoData,
  3013.     OUT PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData,     OPTIONAL
  3014.     IN  DWORD                     DriverInfoDetailDataSize,
  3015.     OUT PDWORD                    RequiredSize              OPTIONAL
  3016.     );
  3017.  
  3018. WINSETUPAPI
  3019. BOOL
  3020. WINAPI
  3021. SetupDiGetDriverInfoDetailW(
  3022.     IN  HDEVINFO                  DeviceInfoSet,
  3023.     IN  PSP_DEVINFO_DATA          DeviceInfoData,           OPTIONAL
  3024.     IN  PSP_DRVINFO_DATA_W        DriverInfoData,
  3025.     OUT PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData,     OPTIONAL
  3026.     IN  DWORD                     DriverInfoDetailDataSize,
  3027.     OUT PDWORD                    RequiredSize              OPTIONAL
  3028.     );
  3029.  
  3030. #ifdef UNICODE
  3031. #define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailW
  3032. #else
  3033. #define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailA
  3034. #endif
  3035.  
  3036.  
  3037. WINSETUPAPI
  3038. BOOL
  3039. WINAPI
  3040. SetupDiDestroyDriverInfoList(
  3041.     IN HDEVINFO         DeviceInfoSet,
  3042.     IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
  3043.     IN DWORD            DriverType
  3044.     );
  3045.  
  3046.  
  3047. //
  3048. // Flags controlling what is included in the device information set built
  3049. // by SetupDiGetClassDevs
  3050. //
  3051. // #define DIGCF_DEFAULT        0x00000001  // defined but not implemented by setupx
  3052. #define DIGCF_PRESENT           0x00000002
  3053. #define DIGCF_ALLCLASSES        0x00000004
  3054. #define DIGCF_PROFILE           0x00000008
  3055.  
  3056. WINSETUPAPI
  3057. HDEVINFO
  3058. WINAPI
  3059. SetupDiGetClassDevsA(
  3060.     IN LPGUID ClassGuid,  OPTIONAL
  3061.     IN PCSTR  Enumerator, OPTIONAL
  3062.     IN HWND   hwndParent, OPTIONAL
  3063.     IN DWORD  Flags
  3064.     );
  3065.  
  3066. WINSETUPAPI
  3067. HDEVINFO
  3068. WINAPI
  3069. SetupDiGetClassDevsW(
  3070.     IN LPGUID ClassGuid,  OPTIONAL
  3071.     IN PCWSTR Enumerator, OPTIONAL
  3072.     IN HWND   hwndParent, OPTIONAL
  3073.     IN DWORD  Flags
  3074.     );
  3075.  
  3076. #ifdef UNICODE
  3077. #define SetupDiGetClassDevs SetupDiGetClassDevsW
  3078. #else
  3079. #define SetupDiGetClassDevs SetupDiGetClassDevsA
  3080. #endif
  3081.  
  3082.  
  3083. WINSETUPAPI
  3084. BOOL
  3085. WINAPI
  3086. SetupDiGetINFClassA(
  3087.     IN  PCSTR  InfName,
  3088.     OUT LPGUID ClassGuid,
  3089.     OUT PSTR   ClassName,
  3090.     IN  DWORD  ClassNameSize,
  3091.     OUT PDWORD RequiredSize   OPTIONAL
  3092.     );
  3093.  
  3094. WINSETUPAPI
  3095. BOOL
  3096. WINAPI
  3097. SetupDiGetINFClassW(
  3098.     IN  PCWSTR InfName,
  3099.     OUT LPGUID ClassGuid,
  3100.     OUT PWSTR  ClassName,
  3101.     IN  DWORD  ClassNameSize,
  3102.     OUT PDWORD RequiredSize   OPTIONAL
  3103.     );
  3104.  
  3105. #ifdef UNICODE
  3106. #define SetupDiGetINFClass SetupDiGetINFClassW
  3107. #else
  3108. #define SetupDiGetINFClass SetupDiGetINFClassA
  3109. #endif
  3110.  
  3111.  
  3112. //
  3113. // Flags controlling exclusion from the class information list built
  3114. // by SetupDiBuildClassInfoList
  3115. //
  3116. #define DIBCI_NOINSTALLCLASS   0x00000001
  3117. #define DIBCI_NODISPLAYCLASS   0x00000002
  3118.  
  3119. WINSETUPAPI
  3120. BOOL
  3121. WINAPI
  3122. SetupDiBuildClassInfoList(
  3123.     IN  DWORD  Flags,
  3124.     OUT LPGUID ClassGuidList,
  3125.     IN  DWORD  ClassGuidListSize,
  3126.     OUT PDWORD RequiredSize
  3127.     );
  3128.  
  3129.  
  3130. WINSETUPAPI
  3131. BOOL
  3132. WINAPI
  3133. SetupDiGetClassDescriptionA(
  3134.     IN  LPGUID ClassGuid,
  3135.     OUT PSTR   ClassDescription,
  3136.     IN  DWORD  ClassDescriptionSize,
  3137.     OUT PDWORD RequiredSize          OPTIONAL
  3138.     );
  3139.  
  3140. WINSETUPAPI
  3141. BOOL
  3142. WINAPI
  3143. SetupDiGetClassDescriptionW(
  3144.     IN  LPGUID ClassGuid,
  3145.     OUT PWSTR  ClassDescription,
  3146.     IN  DWORD  ClassDescriptionSize,
  3147.     OUT PDWORD RequiredSize          OPTIONAL
  3148.     );
  3149.  
  3150. #ifdef UNICODE
  3151. #define SetupDiGetClassDescription SetupDiGetClassDescriptionW
  3152. #else
  3153. #define SetupDiGetClassDescription SetupDiGetClassDescriptionA
  3154. #endif
  3155.  
  3156.  
  3157. WINSETUPAPI
  3158. BOOL
  3159. WINAPI
  3160. SetupDiCallClassInstaller(
  3161.     IN DI_FUNCTION      InstallFunction,
  3162.     IN HDEVINFO         DeviceInfoSet,
  3163.     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3164.     );
  3165.  
  3166.  
  3167. //
  3168. // Default install handler for DIF_SELECTDEVICE
  3169. //
  3170. WINSETUPAPI
  3171. BOOL
  3172. WINAPI
  3173. SetupDiSelectDevice(
  3174.     IN     HDEVINFO         DeviceInfoSet,
  3175.     IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3176.     );
  3177.  
  3178.  
  3179. //
  3180. // Default install handler for DIF_INSTALLDEVICE
  3181. //
  3182. WINSETUPAPI
  3183. BOOL
  3184. WINAPI
  3185. SetupDiInstallDevice(
  3186.     IN     HDEVINFO         DeviceInfoSet,
  3187.     IN OUT PSP_DEVINFO_DATA DeviceInfoData
  3188.     );
  3189.  
  3190.  
  3191. //
  3192. // Default install handler for DIF_INSTALLDEVICEFILES
  3193. //
  3194. WINSETUPAPI
  3195. BOOL
  3196. WINAPI
  3197. SetupDiInstallDriverFiles(
  3198.     IN HDEVINFO         DeviceInfoSet,
  3199.     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3200.     );
  3201.  
  3202.  
  3203. //
  3204. // Default install handler for DIF_REMOVE
  3205. //
  3206. WINSETUPAPI
  3207. BOOL
  3208. WINAPI
  3209. SetupDiRemoveDevice(
  3210.     IN     HDEVINFO         DeviceInfoSet,
  3211.     IN OUT PSP_DEVINFO_DATA DeviceInfoData
  3212.     );
  3213.  
  3214.  
  3215. //
  3216. // Default install handler for DIF_MOVEDEVICE
  3217. //
  3218. WINSETUPAPI
  3219. BOOL
  3220. WINAPI
  3221. SetupDiMoveDuplicateDevice(
  3222.     IN HDEVINFO         DeviceInfoSet,
  3223.     IN PSP_DEVINFO_DATA DestinationDeviceInfoData
  3224.     );
  3225.  
  3226.  
  3227. //
  3228. // Default install handler for DIF_PROPERTYCHANGE
  3229. //
  3230. WINSETUPAPI
  3231. BOOL
  3232. WINAPI
  3233. SetupDiChangeState(
  3234.     IN     HDEVINFO         DeviceInfoSet,
  3235.     IN OUT PSP_DEVINFO_DATA DeviceInfoData
  3236.     );
  3237.  
  3238.  
  3239. WINSETUPAPI
  3240. BOOL
  3241. WINAPI
  3242. SetupDiInstallClassA(
  3243.     IN HWND     hwndParent,  OPTIONAL
  3244.     IN PCSTR    InfFileName,
  3245.     IN DWORD    Flags,
  3246.     IN HSPFILEQ FileQueue    OPTIONAL
  3247.     );
  3248.  
  3249. WINSETUPAPI
  3250. BOOL
  3251. WINAPI
  3252. SetupDiInstallClassW(
  3253.     IN HWND     hwndParent,  OPTIONAL
  3254.     IN PCWSTR   InfFileName,
  3255.     IN DWORD    Flags,
  3256.     IN HSPFILEQ FileQueue    OPTIONAL
  3257.     );
  3258.  
  3259. #ifdef UNICODE
  3260. #define SetupDiInstallClass SetupDiInstallClassW
  3261. #else
  3262. #define SetupDiInstallClass SetupDiInstallClassA
  3263. #endif
  3264.  
  3265.  
  3266. WINSETUPAPI
  3267. HKEY
  3268. WINAPI
  3269. SetupDiOpenClassRegKey(
  3270.     IN LPGUID ClassGuid, OPTIONAL
  3271.     IN REGSAM samDesired
  3272.     );
  3273.  
  3274.  
  3275. //
  3276. // KeyType values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and
  3277. // SetupDiDeleteDevRegKey.
  3278. //
  3279. #define DIREG_DEV       0x00000001          // Open/Create/Delete device key
  3280. #define DIREG_DRV       0x00000002          // Open/Create/Delete driver key
  3281. #define DIREG_BOTH      0x00000004          // Delete both driver and Device key
  3282.  
  3283. WINSETUPAPI
  3284. HKEY
  3285. WINAPI
  3286. SetupDiCreateDevRegKeyA(
  3287.     IN HDEVINFO         DeviceInfoSet,
  3288.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3289.     IN DWORD            Scope,
  3290.     IN DWORD            HwProfile,
  3291.     IN DWORD            KeyType,
  3292.     IN HINF             InfHandle,      OPTIONAL
  3293.     IN PCSTR            InfSectionName  OPTIONAL
  3294.     );
  3295.  
  3296. WINSETUPAPI
  3297. HKEY
  3298. WINAPI
  3299. SetupDiCreateDevRegKeyW(
  3300.     IN HDEVINFO         DeviceInfoSet,
  3301.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3302.     IN DWORD            Scope,
  3303.     IN DWORD            HwProfile,
  3304.     IN DWORD            KeyType,
  3305.     IN HINF             InfHandle,      OPTIONAL
  3306.     IN PCWSTR           InfSectionName  OPTIONAL
  3307.     );
  3308.  
  3309. #ifdef UNICODE
  3310. #define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW
  3311. #else
  3312. #define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyA
  3313. #endif
  3314.  
  3315.  
  3316. WINSETUPAPI
  3317. HKEY
  3318. WINAPI
  3319. SetupDiOpenDevRegKey(
  3320.     IN HDEVINFO         DeviceInfoSet,
  3321.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3322.     IN DWORD            Scope,
  3323.     IN DWORD            HwProfile,
  3324.     IN DWORD            KeyType,
  3325.     IN REGSAM           samDesired
  3326.     );
  3327.  
  3328.  
  3329. WINSETUPAPI
  3330. BOOL
  3331. WINAPI
  3332. SetupDiDeleteDevRegKey(
  3333.     IN HDEVINFO         DeviceInfoSet,
  3334.     IN PSP_DEVINFO_DATA DeviceInfoData,
  3335.     IN DWORD            Scope,
  3336.     IN DWORD            HwProfile,
  3337.     IN DWORD            KeyType
  3338.     );
  3339.  
  3340.  
  3341. WINSETUPAPI
  3342. BOOL
  3343. WINAPI
  3344. SetupDiGetHwProfileList(
  3345.     OUT PDWORD HwProfileList,
  3346.     IN  DWORD  HwProfileListSize,
  3347.     OUT PDWORD RequiredSize,
  3348.     OUT PDWORD CurrentlyActiveIndex OPTIONAL
  3349.     );
  3350.  
  3351.  
  3352. //
  3353. // Device registry property codes
  3354. // (Codes marked as read-only (R) may only be used for
  3355. // SetupDiGetDeviceRegistryProperty)
  3356. //
  3357. // These values should cover the same set of registry properties
  3358. // as defined by the CM_DRP codes in cfgmgr32.h.
  3359. //
  3360. #define SPDRP_DEVICEDESC           (0x00000000)  // DeviceDesc (R/W)
  3361. #define SPDRP_HARDWAREID           (0x00000001)  // HardwareID (R/W)
  3362. #define SPDRP_COMPATIBLEIDS        (0x00000002)  // CompatibleIDs (R/W)
  3363. #define SPDRP_NTDEVICEPATHS        (0x00000003)  // NtDevicePaths (R)
  3364. #define SPDRP_SERVICE              (0x00000004)  // Service (R/W)
  3365. #define SPDRP_CONFIGURATION        (0x00000005)  // Configuration (R)
  3366. #define SPDRP_CONFIGURATIONVECTOR  (0x00000006)  // ConfigurationVector (R)
  3367. #define SPDRP_CLASS                (0x00000007)  // Class (R--tied to ClassGUID)
  3368. #define SPDRP_CLASSGUID            (0x00000008)  // ClassGUID (R/W)
  3369. #define SPDRP_DRIVER               (0x00000009)  // Driver (R/W)
  3370. #define SPDRP_CONFIGFLAGS          (0x0000000A)  // ConfigFlags (R/W)
  3371. #define SPDRP_MFG                  (0x0000000B)  // Mfg (R/W)
  3372. #define SPDRP_FRIENDLYNAME         (0x0000000C)  // FriendlyName (R/W)
  3373. #define SPDRP_MAXIMUM_PROPERTY     (0x0000000D)  // Upper bound on ordinals
  3374.  
  3375. WINSETUPAPI
  3376. BOOL
  3377. WINAPI
  3378. SetupDiGetDeviceRegistryPropertyA(
  3379.     IN  HDEVINFO         DeviceInfoSet,
  3380.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  3381.     IN  DWORD            Property,
  3382.     OUT PDWORD           PropertyRegDataType, OPTIONAL
  3383.     OUT PBYTE            PropertyBuffer,
  3384.     IN  DWORD            PropertyBufferSize,
  3385.     OUT PDWORD           RequiredSize         OPTIONAL
  3386.     );
  3387.  
  3388. WINSETUPAPI
  3389. BOOL
  3390. WINAPI
  3391. SetupDiGetDeviceRegistryPropertyW(
  3392.     IN  HDEVINFO         DeviceInfoSet,
  3393.     IN  PSP_DEVINFO_DATA DeviceInfoData,
  3394.     IN  DWORD            Property,
  3395.     OUT PDWORD           PropertyRegDataType, OPTIONAL
  3396.     OUT PBYTE            PropertyBuffer,
  3397.     IN  DWORD            PropertyBufferSize,
  3398.     OUT PDWORD           RequiredSize         OPTIONAL
  3399.     );
  3400.  
  3401. #ifdef UNICODE
  3402. #define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW
  3403. #else
  3404. #define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA
  3405. #endif
  3406.  
  3407.  
  3408. WINSETUPAPI
  3409. BOOL
  3410. WINAPI
  3411. SetupDiSetDeviceRegistryPropertyA(
  3412.     IN     HDEVINFO         DeviceInfoSet,
  3413.     IN OUT PSP_DEVINFO_DATA DeviceInfoData,
  3414.     IN     DWORD            Property,
  3415.     IN     CONST BYTE*      PropertyBuffer,
  3416.     IN     DWORD            PropertyBufferSize
  3417.     );
  3418.  
  3419. WINSETUPAPI
  3420. BOOL
  3421. WINAPI
  3422. SetupDiSetDeviceRegistryPropertyW(
  3423.     IN     HDEVINFO         DeviceInfoSet,
  3424.     IN OUT PSP_DEVINFO_DATA DeviceInfoData,
  3425.     IN     DWORD            Property,
  3426.     IN     CONST BYTE*      PropertyBuffer,
  3427.     IN     DWORD            PropertyBufferSize
  3428.     );
  3429.  
  3430. #ifdef UNICODE
  3431. #define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyW
  3432. #else
  3433. #define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyA
  3434. #endif
  3435.  
  3436.  
  3437. WINSETUPAPI
  3438. BOOL
  3439. WINAPI
  3440. SetupDiGetDeviceInstallParamsA(
  3441.     IN  HDEVINFO                DeviceInfoSet,
  3442.     IN  PSP_DEVINFO_DATA        DeviceInfoData,          OPTIONAL
  3443.     OUT PSP_DEVINSTALL_PARAMS_A DeviceInstallParams
  3444.     );
  3445.  
  3446. WINSETUPAPI
  3447. BOOL
  3448. WINAPI
  3449. SetupDiGetDeviceInstallParamsW(
  3450.     IN  HDEVINFO                DeviceInfoSet,
  3451.     IN  PSP_DEVINFO_DATA        DeviceInfoData,          OPTIONAL
  3452.     OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams
  3453.     );
  3454.  
  3455. #ifdef UNICODE
  3456. #define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsW
  3457. #else
  3458. #define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsA
  3459. #endif
  3460.  
  3461.  
  3462. WINSETUPAPI
  3463. BOOL
  3464. WINAPI
  3465. SetupDiGetClassInstallParamsA(
  3466.     IN  HDEVINFO                DeviceInfoSet,
  3467.     IN  PSP_DEVINFO_DATA        DeviceInfoData,         OPTIONAL
  3468.     OUT PSP_CLASSINSTALL_HEADER ClassInstallParams,     OPTIONAL
  3469.     IN  DWORD                   ClassInstallParamsSize,
  3470.     OUT PDWORD                  RequiredSize            OPTIONAL
  3471.     );
  3472.  
  3473. WINSETUPAPI
  3474. BOOL
  3475. WINAPI
  3476. SetupDiGetClassInstallParamsW(
  3477.     IN  HDEVINFO                DeviceInfoSet,
  3478.     IN  PSP_DEVINFO_DATA        DeviceInfoData,         OPTIONAL
  3479.     OUT PSP_CLASSINSTALL_HEADER ClassInstallParams,     OPTIONAL
  3480.     IN  DWORD                   ClassInstallParamsSize,
  3481.     OUT PDWORD                  RequiredSize            OPTIONAL
  3482.     );
  3483.  
  3484. #ifdef UNICODE
  3485. #define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsW
  3486. #else
  3487. #define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsA
  3488. #endif
  3489.  
  3490.  
  3491. WINSETUPAPI
  3492. BOOL
  3493. WINAPI
  3494. SetupDiSetDeviceInstallParamsA(
  3495.     IN HDEVINFO                DeviceInfoSet,
  3496.     IN PSP_DEVINFO_DATA        DeviceInfoData,     OPTIONAL
  3497.     IN PSP_DEVINSTALL_PARAMS_A DeviceInstallParams
  3498.     );
  3499.  
  3500. WINSETUPAPI
  3501. BOOL
  3502. WINAPI
  3503. SetupDiSetDeviceInstallParamsW(
  3504.     IN HDEVINFO                DeviceInfoSet,
  3505.     IN PSP_DEVINFO_DATA        DeviceInfoData,     OPTIONAL
  3506.     IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams
  3507.     );
  3508.  
  3509. #ifdef UNICODE
  3510. #define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsW
  3511. #else
  3512. #define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsA
  3513. #endif
  3514.  
  3515.  
  3516. WINSETUPAPI
  3517. BOOL
  3518. WINAPI
  3519. SetupDiSetClassInstallParamsA(
  3520.     IN HDEVINFO                DeviceInfoSet,
  3521.     IN PSP_DEVINFO_DATA        DeviceInfoData,        OPTIONAL
  3522.     IN PSP_CLASSINSTALL_HEADER ClassInstallParams,    OPTIONAL
  3523.     IN DWORD                   ClassInstallParamsSize
  3524.     );
  3525.  
  3526. WINSETUPAPI
  3527. BOOL
  3528. WINAPI
  3529. SetupDiSetClassInstallParamsW(
  3530.     IN HDEVINFO                DeviceInfoSet,
  3531.     IN PSP_DEVINFO_DATA        DeviceInfoData,        OPTIONAL
  3532.     IN PSP_CLASSINSTALL_HEADER ClassInstallParams,    OPTIONAL
  3533.     IN DWORD                   ClassInstallParamsSize
  3534.     );
  3535.  
  3536. #ifdef UNICODE
  3537. #define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsW
  3538. #else
  3539. #define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsA
  3540. #endif
  3541.  
  3542.  
  3543. WINSETUPAPI
  3544. BOOL
  3545. WINAPI
  3546. SetupDiGetDriverInstallParamsA(
  3547.     IN  HDEVINFO              DeviceInfoSet,
  3548.     IN  PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3549.     IN  PSP_DRVINFO_DATA_A    DriverInfoData,
  3550.     OUT PSP_DRVINSTALL_PARAMS DriverInstallParams
  3551.     );
  3552.  
  3553. WINSETUPAPI
  3554. BOOL
  3555. WINAPI
  3556. SetupDiGetDriverInstallParamsW(
  3557.     IN  HDEVINFO              DeviceInfoSet,
  3558.     IN  PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3559.     IN  PSP_DRVINFO_DATA_W    DriverInfoData,
  3560.     OUT PSP_DRVINSTALL_PARAMS DriverInstallParams
  3561.     );
  3562.  
  3563. #ifdef UNICODE
  3564. #define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsW
  3565. #else
  3566. #define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsA
  3567. #endif
  3568.  
  3569.  
  3570. WINSETUPAPI
  3571. BOOL
  3572. WINAPI
  3573. SetupDiSetDriverInstallParamsA(
  3574.     IN HDEVINFO              DeviceInfoSet,
  3575.     IN PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3576.     IN PSP_DRVINFO_DATA_A    DriverInfoData,
  3577.     IN PSP_DRVINSTALL_PARAMS DriverInstallParams
  3578.     );
  3579.  
  3580. WINSETUPAPI
  3581. BOOL
  3582. WINAPI
  3583. SetupDiSetDriverInstallParamsW(
  3584.     IN HDEVINFO              DeviceInfoSet,
  3585.     IN PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
  3586.     IN PSP_DRVINFO_DATA_W    DriverInfoData,
  3587.     IN PSP_DRVINSTALL_PARAMS DriverInstallParams
  3588.     );
  3589.  
  3590. #ifdef UNICODE
  3591. #define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsW
  3592. #else
  3593. #define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsA
  3594. #endif
  3595.  
  3596.  
  3597. WINSETUPAPI
  3598. BOOL
  3599. WINAPI
  3600. SetupDiLoadClassIcon(
  3601.     IN  LPGUID  ClassGuid,
  3602.     OUT HICON  *LargeIcon,    OPTIONAL
  3603.     OUT PINT    MiniIconIndex OPTIONAL
  3604.     );
  3605.  
  3606.  
  3607. //
  3608. // Flags controlling the drawing of mini-icons
  3609. //
  3610. #define DMI_MASK      0x00000001
  3611. #define DMI_BKCOLOR   0x00000002
  3612. #define DMI_USERECT   0x00000004
  3613.  
  3614. WINSETUPAPI
  3615. INT
  3616. WINAPI
  3617. SetupDiDrawMiniIcon(
  3618.     IN HDC   hdc,
  3619.     IN RECT  rc,
  3620.     IN INT   MiniIconIndex,
  3621.     IN DWORD Flags
  3622.     );
  3623.  
  3624.  
  3625. WINSETUPAPI
  3626. BOOL
  3627. WINAPI
  3628. SetupDiGetClassBitmapIndex(
  3629.     IN  LPGUID ClassGuid,
  3630.     OUT PINT   MiniIconIndex
  3631.     );
  3632.  
  3633.  
  3634. WINSETUPAPI
  3635. BOOL
  3636. WINAPI
  3637. SetupDiGetClassImageList(
  3638.     OUT PSP_CLASSIMAGELIST_DATA ClassImageListData
  3639.     );
  3640.  
  3641.  
  3642. WINSETUPAPI
  3643. BOOL
  3644. WINAPI
  3645. SetupDiGetClassImageIndex(
  3646.     IN  PSP_CLASSIMAGELIST_DATA ClassImageListData,
  3647.     IN  LPGUID                  ClassGuid,
  3648.     OUT PINT                    ImageIndex
  3649.     );
  3650.  
  3651.  
  3652. WINSETUPAPI
  3653. BOOL
  3654. WINAPI
  3655. SetupDiDestroyClassImageList(
  3656.     IN PSP_CLASSIMAGELIST_DATA ClassImageListData
  3657.     );
  3658.  
  3659.  
  3660. //
  3661. // Flags for the SetupDiGetClassDevPropertySheets API
  3662. //
  3663. #define DIGCDP_FLAG_BASIC           0x00000001
  3664. #define DIGCDP_FLAG_ADVANCED        0x00000002
  3665.  
  3666. WINSETUPAPI
  3667. BOOL
  3668. WINAPI
  3669. SetupDiGetClassDevPropertySheetsA(
  3670.     IN HDEVINFO           DeviceInfoSet,
  3671.     IN PSP_DEVINFO_DATA   DeviceInfoData,      OPTIONAL
  3672.     IN LPPROPSHEETHEADERA PropertySheetHeader,
  3673.     IN DWORD              Flags
  3674.     );
  3675.  
  3676. WINSETUPAPI
  3677. BOOL
  3678. WINAPI
  3679. SetupDiGetClassDevPropertySheetsW(
  3680.     IN HDEVINFO           DeviceInfoSet,
  3681.     IN PSP_DEVINFO_DATA   DeviceInfoData,      OPTIONAL
  3682.     IN LPPROPSHEETHEADERW PropertySheetHeader,
  3683.     IN DWORD              Flags
  3684.     );
  3685.  
  3686. #ifdef UNICODE
  3687. #define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW
  3688. #else
  3689. #define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA
  3690. #endif
  3691.  
  3692.  
  3693. WINSETUPAPI
  3694. BOOL
  3695. WINAPI
  3696. SetupDiAskForOEMDisk(
  3697.     IN HDEVINFO         DeviceInfoSet,
  3698.     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3699.     );
  3700.  
  3701.  
  3702. WINSETUPAPI
  3703. BOOL
  3704. WINAPI
  3705. SetupDiSelectOEMDrv(
  3706.     IN     HWND             hwndParent,    OPTIONAL
  3707.     IN     HDEVINFO         DeviceInfoSet,
  3708.     IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
  3709.     );
  3710.  
  3711.  
  3712. WINSETUPAPI
  3713. BOOL
  3714. WINAPI
  3715. SetupDiClassNameFromGuidA(
  3716.     IN  LPGUID ClassGuid,
  3717.     OUT PSTR   ClassName,
  3718.     IN  DWORD  ClassNameSize,
  3719.     OUT PDWORD RequiredSize   OPTIONAL
  3720.     );
  3721.  
  3722. WINSETUPAPI
  3723. BOOL
  3724. WINAPI
  3725. SetupDiClassNameFromGuidW(
  3726.     IN  LPGUID ClassGuid,
  3727.     OUT PWSTR  ClassName,
  3728.     IN  DWORD  ClassNameSize,
  3729.     OUT PDWORD RequiredSize   OPTIONAL
  3730.     );
  3731.  
  3732. #ifdef UNICODE
  3733. #define SetupDiClassNameFromGuid SetupDiClassNameFromGuidW
  3734. #else
  3735. #define SetupDiClassNameFromGuid SetupDiClassNameFromGuidA
  3736. #endif
  3737.  
  3738.  
  3739. WINSETUPAPI
  3740. BOOL
  3741. WINAPI
  3742. SetupDiClassGuidsFromNameA(
  3743.     IN  PCSTR  ClassName,
  3744.     OUT LPGUID ClassGuidList,
  3745.     IN  DWORD  ClassGuidListSize,
  3746.     OUT PDWORD RequiredSize
  3747.     );
  3748.  
  3749. WINSETUPAPI
  3750. BOOL
  3751. WINAPI
  3752. SetupDiClassGuidsFromNameW(
  3753.     IN  PCWSTR ClassName,
  3754.     OUT LPGUID ClassGuidList,
  3755.     IN  DWORD  ClassGuidListSize,
  3756.     OUT PDWORD RequiredSize
  3757.     );
  3758.  
  3759. #ifdef UNICODE
  3760. #define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameW
  3761. #else
  3762. #define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameA
  3763. #endif
  3764.  
  3765.  
  3766. WINSETUPAPI
  3767. BOOL
  3768. WINAPI
  3769. SetupDiGetHwProfileFriendlyNameA(
  3770.     IN  DWORD  HwProfile,
  3771.     OUT PSTR   FriendlyName,
  3772.     IN  DWORD  FriendlyNameSize,
  3773.     OUT PDWORD RequiredSize      OPTIONAL
  3774.     );
  3775.  
  3776. WINSETUPAPI
  3777. BOOL
  3778. WINAPI
  3779. SetupDiGetHwProfileFriendlyNameW(
  3780.     IN  DWORD  HwProfile,
  3781.     OUT PWSTR  FriendlyName,
  3782.     IN  DWORD  FriendlyNameSize,
  3783.     OUT PDWORD RequiredSize      OPTIONAL
  3784.     );
  3785.  
  3786. #ifdef UNICODE
  3787. #define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameW
  3788. #else
  3789. #define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameA
  3790. #endif
  3791.  
  3792.  
  3793. //
  3794. // PageType values for SetupDiGetWizardPage API
  3795. //
  3796. #define SPWPT_SELECTDEVICE      0x00000001
  3797.  
  3798. //
  3799. // Flags for SetupDiGetWizardPage API
  3800. //
  3801. #define SPWP_USE_DEVINFO_DATA   0x00000001
  3802.  
  3803. WINSETUPAPI
  3804. HPROPSHEETPAGE
  3805. WINAPI
  3806. SetupDiGetWizardPage(
  3807.     IN HDEVINFO               DeviceInfoSet,
  3808.     IN PSP_DEVINFO_DATA       DeviceInfoData,    OPTIONAL
  3809.     IN PSP_INSTALLWIZARD_DATA InstallWizardData,
  3810.     IN DWORD                  PageType,
  3811.     IN DWORD                  Flags
  3812.     );
  3813.  
  3814.  
  3815. WINSETUPAPI
  3816. BOOL
  3817. WINAPI
  3818. SetupDiGetSelectedDevice(
  3819.     IN  HDEVINFO         DeviceInfoSet,
  3820.     OUT PSP_DEVINFO_DATA DeviceInfoData
  3821.     );
  3822.  
  3823.  
  3824. WINSETUPAPI
  3825. BOOL
  3826. WINAPI
  3827. SetupDiSetSelectedDevice(
  3828.     IN HDEVINFO         DeviceInfoSet,
  3829.     IN PSP_DEVINFO_DATA DeviceInfoData
  3830.     );
  3831.  
  3832.  
  3833. WINSETUPAPI
  3834. BOOL
  3835. WINAPI
  3836. SetupDiGetActualSectionToInstallA(
  3837.     IN  HINF    InfHandle,
  3838.     IN  PCSTR   InfSectionName,
  3839.     OUT PSTR    InfSectionWithExt,     OPTIONAL
  3840.     IN  DWORD   InfSectionWithExtSize,
  3841.     OUT PDWORD  RequiredSize,          OPTIONAL
  3842.     OUT PSTR   *Extension              OPTIONAL
  3843.     );
  3844.  
  3845. WINSETUPAPI
  3846. BOOL
  3847. WINAPI
  3848. SetupDiGetActualSectionToInstallW(
  3849.     IN  HINF    InfHandle,
  3850.     IN  PCWSTR  InfSectionName,
  3851.     OUT PWSTR   InfSectionWithExt,     OPTIONAL
  3852.     IN  DWORD   InfSectionWithExtSize,
  3853.     OUT PDWORD  RequiredSize,          OPTIONAL
  3854.     OUT PWSTR  *Extension              OPTIONAL
  3855.     );
  3856.  
  3857. #ifdef UNICODE
  3858. #define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW
  3859. #else
  3860. #define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA
  3861. #endif
  3862.  
  3863.  
  3864. #ifdef __cplusplus
  3865. }
  3866. #endif
  3867.  
  3868.  
  3869. #include <poppack.h>
  3870.  
  3871.  
  3872. #pragma option pop
  3873. #endif // _INC_SETUPAPI
  3874.